Swift - UIViewController 与 UITableViewController 中的覆盖函数

Posted

技术标签:

【中文标题】Swift - UIViewController 与 UITableViewController 中的覆盖函数【英文标题】:Swift - Override functions in UIViewController vs UITableViewController 【发布时间】:2014-12-25 00:28:45 【问题描述】:

当我使用 UITableViewController 创建 tableView 时,你会得到很多覆盖函数,但是当你使用常规 UIViewController 时,在使用这些相同的覆盖函数时会出现错误,并且你不得不将它们更改为常规函数。我相信这就是为什么我的核心数据不会加载到我的单元格中,并尝试使用 viewDidLoad 函数来加载我的数据。

我知道我的代码应该可以工作,因为我要做的只是将我的所有代码从 UITableViewController 转移到 UIViewController,并且我的代码在我的 UITableViewController 中工作。

到目前为止我的努力:

override func viewDidLoad() 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        // Configure the cell...

        let CellID:NSString = "CELL"

        var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(CellID) as UITableViewCell

        if let ip = indexPath as Optional 

            var data:NSManagedObject = myList[ip.row] as NSManagedObject
            cell.textLabel!.text = data.valueForKeyPath("username") as? String
        

        return cell
    

我的单元格为空的原因是覆盖函数,还是在使用常规 UIViewController 显示 tableView 时还有其他方面?

任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

(1) 您必须将UITableViewDelegate 添加到类中才能访问委托方法,例如:

class ViewController: UIViewController, UITableViewDelegate 

UITableViewDelegate 添加到类后,您的UITableView 委托函数应该会自动完成。

另外,确保将UITableView 的委托设置为self,以便让委托方法填充表格。

(2) 现在,您的cellForRowAtIndexPath 方法您的viewDidLoad。移动它,使其不包含在任何其他方法中。

【讨论】:

我已经添加了 UITableViewDelegate,正如我所说的应用程序运行,它只是不填充表格。我也尝试过在 viewDidLoad 之外使用 cellForRowAtIndexPath 函数,但这不起作用。至于将代表设置为“自我”,我不太清楚你的意思,所以我无法回答。但正如我所说,我所做的只是将我的代码从 tableViewController 转移到 viewController,添加 UITableViewDelegate 并删除某些函数前面的“覆盖”。 @frank21 1. 您需要“覆盖”。现在您已经添加了 UITableViewDelegate,尝试再次输入 tableview 委托函数。它们应该自动完成以包含覆盖。 2.您需要以编程方式(即self.tableView.delegate = self)或使用界面构建器将 tableview 的委托设置为 self,例如:***.com/a/19216613/2274694

以上是关于Swift - UIViewController 与 UITableViewController 中的覆盖函数的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 UIViewcontroller 实例 [重复]

swift Swift - UIViewController的类扩展

Swift:继承 UIViewController 的根视图

在 Swift 中动态创建 uiviewcontroller

Swift中的UIViewcontroller实例[重复]

从 UIViewController 呈现 SKScene - Swift