UITableView가 프로토 타입 셀을 표시하지 않음

사용자 3407319

TV에서 동영상을 재생하기 위해 Chromecast에 연결하는 앱을 만들려고합니다. 지금까지 두 개의보기 컨트롤러를 사용하여 동영상 링크를 표시하려고합니다. 사용자가 페이지에서 전송할 비디오를 선택할 수 있도록 첫 번째보기에서 유추 된 모든 비디오 링크를 표시하는 것입니다. 링크를 가져올 수 있지만 문제는 표보기 셀에 표시되고 싶지 않다는 것입니다. 많은 메서드를 시도했지만 어떤 이유로 UITableViewDataSource 메서드가 전혀 호출되지 않는 것으로 나타났습니다. 다음은 코드입니다.

ViewController.swift :

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {
    //MARK: Outlets
    @IBOutlet weak var searchBar: UITextField!
    @IBOutlet weak var webView: UIWebView!
    @IBOutlet weak var cancelButton: UIButton!
    @IBOutlet weak var searchBarTrailingConstraint: NSLayoutConstraint!

    //MARK: Properties
    static var videoURLs: [String] = []

    //MARK: Methods
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        cancelButton.layer.cornerRadius = 5
        cancelButton.isHidden = true
        webView.delegate = self

    }

    func webViewDidFinishLoad(_ webView: UIWebView) {
        var videoTag = ""
        var embedTag = ""
        let htmlCode = webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")
        let htmlTags = htmlCode!.components(separatedBy: "\n") as [String]
        for tag in htmlTags{
            var videoURL = ""
            if tag.contains("<video") {
                videoTag = tag.substring(from: tag.range(of: "<video")!.lowerBound)
                videoTag = videoTag.substring(to: (videoTag.range(of: ">")?.upperBound)!)
                if videoTag.contains("src"){
                    videoTag = tag.substring(from: tag.range(of: "src")!.upperBound)
                    for x in videoTag.characters{
                        if x == "\""{
                            continue
                        }else if x == "="{
                            continue
                        }else if x == ">"{
                            break
                        }else{
                            videoURL.append(x)
                        }
                    }
                }
                ViewController.videoURLs.append(videoURL)
            }
            if tag.contains("<embed") {
                embedTag = tag.substring(from: tag.range(of: "<embed")!.lowerBound)
                embedTag = embedTag.substring(to: (embedTag.range(of: ">")?.upperBound)!)
                if embedTag.contains("src"){
                    embedTag = tag.substring(from: tag.range(of: "src")!.upperBound)
                    for x in embedTag.characters{
                        if x == "\""{
                            continue
                        }else if x == "="{
                            continue
                        }else if x == ">"{
                            break
                        }else{
                            videoURL.append(x)
                        }
                    }
                }
                ViewController.videoURLs.append(videoURL)
            }
        }
        NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "Done")))
    }

    //MARK: Actions
    @IBAction func cancelPressed() {
        cancelButton.isHidden = true
        searchBarTrailingConstraint.constant = 0.0
        UIView.animate(withDuration: 0.25) {
            self.view.layoutIfNeeded()
        }
        searchBar.resignFirstResponder()
    }

    @IBAction func searchBarPressed() {
        searchBarTrailingConstraint.constant = (cancelButton.frame.width + 8.0) * -1
        UIView.animate(withDuration: 0.25) {
            self.view.layoutIfNeeded()
        }
        cancelButton.isHidden = false
    }

    @IBAction func returnButtonPressed(_ sender: UITextField) {
        cancelPressed()
        if let url = URL(string: sender.text!){
            if UIApplication.shared.canOpenURL(url){
                let request = URLRequest(url: url)
                webView.loadRequest(request)
            }else{
                let googleSearchURL = URL(string: "https://www.google.com/search?client=safari&q=\(url)&ie=UTF-8&oe=UTF-8")
                let request = URLRequest(url: googleSearchURL!)
                webView.loadRequest(request)
            }
        }else{
            var searchString: [String] = []
            var searchWord = ""
            for x in (sender.text?.characters)!{
                if x == " "{
                    searchString.append(searchWord)
                    searchWord = ""
                }else{
                    searchWord.append(x)
                }
            }
            //For appending the last word not followed by a space
            if !(searchString.last == searchWord){
                searchString.append(searchWord)
            }
            var googleSearchURL = "https://www.google.com/search?client=safari&ie=UTF-8&oe=UTF-8&q="
            for element in searchString{
                googleSearchURL.append(element)
                if !(searchString.last == element){
                    googleSearchURL.append("+")
                }

            }
            let request = URLRequest(url: URL(string:googleSearchURL)!)
            webView.loadRequest(request)
        }
    }

    @IBAction func backButtonPressed(_ sender: UIButton) {
        if webView.canGoBack{
            webView.goBack()
        }
    }

    @IBAction func forwardButtonPressed(_ sender: UIButton) {
        if webView.canGoForward {
            webView.goForward()
        }
    }

}

MediaTableViewController :

import UIKit
import AVFoundation

class MediaTableViewController: UIViewController, UITableViewDataSource {

    var videoURLs: [String] = []
    var videoScreenshots: UIImage!

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(MediaTableViewController.replyToNotification), name: nil, object: nil)

        self.tableView.dataSource = self

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return videoURLs.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("NOW!\n\n\n", indexPath.count)

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MediaTableViewCell

        cell.videoImage.image = videoScreenshot(url: videoURLs[indexPath.count])
        cell.videoURL.text = videoURLs[indexPath.count]

        return cell
    }

    @objc func replyToNotification(){
        videoURLs = ViewController.videoURLs
        ViewController.videoURLs = []
    }

    // MARK: - Table view data source

    func videoScreenshot(url: String) -> UIImage? {

        let asset = AVURLAsset(url: URL(string: url)!)
        let generator = AVAssetImageGenerator(asset: asset)
        generator.appliesPreferredTrackTransform = true

        do {
            let imageRef = try generator.copyCGImage(at: CMTime(value: asset.duration.value/2, timescale: asset.duration.timescale), actualTime: nil)
            return UIImage(cgImage: imageRef)
        }
        catch let error as NSError
        {
            print("Image generation failed with error \(error)")
            return nil
        }
    }

}

MediaTableViewCell.swift :

import UIKit

class MediaTableViewCell: UITableViewCell {

    @IBOutlet weak var videoImage: UIImageView!
    @IBOutlet weak var videoURL: UITextView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

다음은 Main.storyboard입니다.

main.storyboard

얕은

reloadData()따라서 호출하지 않으면 tableView가 유휴 상태입니다.

이 문제를 해결하려면 다음을 수행하십시오 MediaTableViewController.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    tableView.reloadData()
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

UITableView (Swift)의 프로토 타입 셀에 UIImage가 나타나지 않음

분류에서Dev

Xcode 7.3.1에서 콘텐츠를 표시하지 않는 신속한 UITableView 프로토 타입 셀

분류에서Dev

프로토 타입 메서드가 호출되지 않음

분류에서Dev

UITableView의 여러 프로토 타입 셀

분류에서Dev

프로토 타입에 함수 추가가 작동하지 않음

분류에서Dev

Vue가 전역 $ 프로토 타입 변수를 업데이트하지 않음

분류에서Dev

UITableView 프로토 타입 셀을 클릭 할 수 없습니다.

분류에서Dev

자바 스크립트가 프로토 타입 객체에서 정의되지 않은 속성을 설정하지 않음

분류에서Dev

프로토 타입 셀이 작동하지 않을 때 segue를 사용하는 방법

분류에서Dev

내 프로토 타입 셀 xcode에 이미지 표시

분류에서Dev

내 프로토 타입 셀 xcode에 이미지 표시

분류에서Dev

Swift가 Cell 식별자로 셀을 대기열에서 빼낼 수 없음-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

분류에서Dev

검색 창이 프로토 타입 셀에서 작동하지 않습니다.

분류에서Dev

프로토 타입 자바 스크립트가 제대로 작동하지 않음

분류에서Dev

프로토 타입 자바 스크립트가 제대로 작동하지 않음

분류에서Dev

UITableview가 willdisplaycell을 통해 셀을 선택하지 않음

분류에서Dev

GoogleScript가 원하는 셀을 표시하지 않음

분류에서Dev

웹팩은 다른 파일의 객체에 프로토 타입 기능을 추가하지 않습니다.

분류에서Dev

UIView에 포함 된 UItableview의 프로토 타입 셀 내에 사용자 정의 UIimageview 표시

분류에서Dev

UIView에 포함 된 UItableview의 프로토 타입 셀 내에 사용자 정의 UIimageview 표시

분류에서Dev

TableviewCell 내의 TableView가 셀을 표시하지 않음

분류에서Dev

중첩 된 UITableView가 셀을 반환하지 않음

분류에서Dev

객체에 프로토 타입을 추가하는 방법

분류에서Dev

프로토 타입에 속성을 추가하는 방법 (JavaScript)

분류에서Dev

브라우저가 프로토 타입 속성을 다르게 표시하는 이유는 무엇입니까?

분류에서Dev

UITableView에서 동적 프로토 타입을 사용하면 셀 UI 레이아웃에 스토리 보드를 사용할 수 없습니까?

분류에서Dev

UITableView 다시로드가 상단에 행을 추가하지 않음

분류에서Dev

C ++ 프로토 타입이 재정의되지 않음

분류에서Dev

javascript-프로토 타입 내부에 정의되지 않음

Related 관련 기사

  1. 1

    UITableView (Swift)의 프로토 타입 셀에 UIImage가 나타나지 않음

  2. 2

    Xcode 7.3.1에서 콘텐츠를 표시하지 않는 신속한 UITableView 프로토 타입 셀

  3. 3

    프로토 타입 메서드가 호출되지 않음

  4. 4

    UITableView의 여러 프로토 타입 셀

  5. 5

    프로토 타입에 함수 추가가 작동하지 않음

  6. 6

    Vue가 전역 $ 프로토 타입 변수를 업데이트하지 않음

  7. 7

    UITableView 프로토 타입 셀을 클릭 할 수 없습니다.

  8. 8

    자바 스크립트가 프로토 타입 객체에서 정의되지 않은 속성을 설정하지 않음

  9. 9

    프로토 타입 셀이 작동하지 않을 때 segue를 사용하는 방법

  10. 10

    내 프로토 타입 셀 xcode에 이미지 표시

  11. 11

    내 프로토 타입 셀 xcode에 이미지 표시

  12. 12

    Swift가 Cell 식별자로 셀을 대기열에서 빼낼 수 없음-식별자에 대한 펜촉 또는 클래스를 등록하거나 스토리 보드의 프로토 타입 셀을 연결해야합니다.

  13. 13

    검색 창이 프로토 타입 셀에서 작동하지 않습니다.

  14. 14

    프로토 타입 자바 스크립트가 제대로 작동하지 않음

  15. 15

    프로토 타입 자바 스크립트가 제대로 작동하지 않음

  16. 16

    UITableview가 willdisplaycell을 통해 셀을 선택하지 않음

  17. 17

    GoogleScript가 원하는 셀을 표시하지 않음

  18. 18

    웹팩은 다른 파일의 객체에 프로토 타입 기능을 추가하지 않습니다.

  19. 19

    UIView에 포함 된 UItableview의 프로토 타입 셀 내에 사용자 정의 UIimageview 표시

  20. 20

    UIView에 포함 된 UItableview의 프로토 타입 셀 내에 사용자 정의 UIimageview 표시

  21. 21

    TableviewCell 내의 TableView가 셀을 표시하지 않음

  22. 22

    중첩 된 UITableView가 셀을 반환하지 않음

  23. 23

    객체에 프로토 타입을 추가하는 방법

  24. 24

    프로토 타입에 속성을 추가하는 방법 (JavaScript)

  25. 25

    브라우저가 프로토 타입 속성을 다르게 표시하는 이유는 무엇입니까?

  26. 26

    UITableView에서 동적 프로토 타입을 사용하면 셀 UI 레이아웃에 스토리 보드를 사용할 수 없습니까?

  27. 27

    UITableView 다시로드가 상단에 행을 추가하지 않음

  28. 28

    C ++ 프로토 타입이 재정의되지 않음

  29. 29

    javascript-프로토 타입 내부에 정의되지 않음

뜨겁다태그

보관