【问题标题】:Overriding cellForRowAtIndexPath in UITableViewController subclass returns error: does not override any method from superclass覆盖 UITableViewController 子类中的 cellForRowAtIndexPath 返回错误:不覆盖超类中的任何方法
【发布时间】:2017-09-23 20:32:10
【问题描述】:

这是我班级的代码

import UIKit

class VideoSearchController: UITableViewController, UISearchResultsUpdating {

    var searchResults: NSDictionary = [:]

    let searchController = UISearchController(searchResultsController: nil)

    // Can't override
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as! SearchTableCell

        cell.videoTitle.text = "This is the title"
        cell.viewCount.text = "1,234,567"
        cell.channelName.text = "benlvn"
        let url = URL(string: "https://i.redd.it/78r3ttko3nnz.jpg")
        let data = try? Data(contentsOf: url!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch
        cell.thumbnail.image = UIImage(data: data!)

        return cell
    }

    // Can't override
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    // Override works
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchResults.count
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    func updateSearchResults(for searchController: UISearchController) {
        // TODO
    }

    func searchBarIsEmpty() -> Bool {
        // Returns true if the text is empty or nil
        return searchController.searchBar.text?.isEmpty ?? true
    }

}

即使 VideoSearchController 继承自 UITableViewController,它也不会让我覆盖 cellForrowAtIndexPath 或 numberOfSectionsInTableView,因为这些方法在超类中不存在。但是,它确实让我覆盖 numberOfRowsInSection。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 您正试图覆盖旧的 Swift 2 API。

标签: ios swift class inheritance overriding


【解决方案1】:

声明是:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

override func numberOfSections(in tableView: UITableView) -> Int {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2013-07-07
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多