Swift UITableView不显示原型单元格

Swift UITableView不显示原型单元格,swift,uitableview,storyboard,Swift,Uitableview,Storyboard,我正在尝试制作一个连接到chromecast的应用程序,以便在电视上播放视频,到目前为止,我仍在尝试使用两个视图控制器显示视频链接,其中一个包含一个webview,使用户可以获得视频页面,另一个是显示从第一个视图推断出的所有视频链接,以便用户从页面中选择要播放的视频。我能够获得链接,但问题是它不希望显示在表视图单元格中。我尝试了许多方法,但我注意到,出于某种原因,根本没有调用UITableViewDataSource方法。代码如下: ViewController.swift: import UI

我正在尝试制作一个连接到chromecast的应用程序,以便在电视上播放视频,到目前为止,我仍在尝试使用两个视图控制器显示视频链接,其中一个包含一个webview,使用户可以获得视频页面,另一个是显示从第一个视图推断出的所有视频链接,以便用户从页面中选择要播放的视频。我能够获得链接,但问题是它不希望显示在表视图单元格中。我尝试了许多方法,但我注意到,出于某种原因,根本没有调用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()
        }
    }

}
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:


您不调用
reloadData()
,因此tableView处于空闲状态

要解决此问题,请将以下内容添加到
MediaTableViewController

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

正如我看到的,您没有实现tableView委托

 override func viewDidLoad() {
    super.viewDidLoad()

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

}
然后将此方法添加到控制器中

 func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

希望这会有帮助

没有解决它,仍然没有出现任何问题这是另一个问题。最初的问题是“根本没有调用UITableViewDataSource方法”。应使用此解决方案修复此问题。请确认。如果调用了
dataSouce
方法,并且在
tableView
中没有得到任何条目,
MediaTableViewController videourl.count
很可能为零。在本例中,显示您在何处以及如何设置/添加
MediaTableViewController视频URL
。我不认为正在调用这些方法,现在!未在tableview方法中打印在
numberOfRowsInSection
中设置断点。它被称为<代码>现在,因为
MediaTableViewController videoURLs.count
为零(如写入的那样),因此从不调用
cellForRowAt indexPath
。是。您必须随通知一起发送一个
userInfo
字典,其中包含
视频URL
。我建议不要在这里使用通知。您应该只对多个广播使用通知。默认为一个部分。
 func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}