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 的根视图