UITableView tableView(_:didEndDisplaying:forRowAt :)没有被调用

问题描述:

我想用这个回调来检测何时可以重用单元。根据文档的签名是:UITableView tableView(_:didEndDisplaying:forRowAt :)没有被调用

optional func tableView(_ tableView: UITableView, 
     didEndDisplaying cell: UITableViewCell, 
     forRowAt indexPath: IndexPath) 

但实际上,这不会与Xcode 7.3和Swift编译。我认为IndexPath应该是NSIndexPath,_必须被删除。所以我得到:

@objc func tableView(tableView: UITableView, 
    didEndDisplaying cell: UITableViewCell, 
    forRowAt indexPath: NSIndexPath) { 

但是,这从来没有被称为。

出队函数被调用罚款(见下文),并表工作另有:

@objc func tableView(tableView: UITableView, 
    cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

,这样就意味着我的数据源是工作确定。

我想知道这是否是API的一些不起作用的部分。

(P.S.我不记得为什么@objc在那里,但删除它没有任何区别)。

+1

你在那里的'didEndDisplaying'签名是Swift 3版本,但是基于你声称工作的'cellForRow'签名,你正在使用Swift 2。 – dan

出队函数被调用罚款(见下文),并表工作 否则:

@objc func tableView(tableView: UITableView, 
    cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

,这样就意味着我数据源好的工作。

请注意,tableView(_:didEndDisplaying:forRowAt:)是指UITableViewDelegate,而不是UITableViewDataSource。我建议检查一下你的班级还有是否符合UITableViewDelegate

而且,使用的Xcode 7.3意味着你正在写斯威夫特2.x中,它应该是:

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    //... 
} 

在斯威夫特3,它应该是:

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
    // ... 
} 

希望这有助于。

+0

好的 - 就是这样。我在数据源和代表本身之间感到困惑。在视图控制器和正确的签名,它工作正常。并感谢Swift 3的信息。我一直无视它。 – rghome