我有一个tableview,我有20个原型单元格,tableview< strong>内容参数是动态原型
此时我只展示了一个原型细胞,但出于某种奇怪的原因 cellForRowAtIndexPath 正在调用两次。
我已经完成了我的代码,我只打了一次 reloaddata 。
我无法弄清楚可能导致tableview两次调用 cellForRowAtIndexPath 的原因!
所以我一般都想知道什么和所有可能导致tableview为同一行多次调用 cellForRowAtIndexPath
在其中一个原型单元格中,如果单击一个按钮,那么我可能会重新加载数据,以便我可以显示其他一些原型单元格然后再调用两次
但仍有行数是一个
答案 0 :(得分:2)
如果您自己明确地致电reloadData()
,那就可以解释它。 tableView
默认情况下会在UITableViewController
中加载数据,因此再次显式调用它会第二次触发cellForRowAt
。您可以通过删除对reloadData()
的明确调用轻松确认这一点 - 然后tableView
应该看起来正确,cellForRowAt
应该只调用一次。
我在Playgrounds中测试了以下最小的工作示例,并且只调用了一次:
import UIKit
import PlaygroundSupport
class A: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Reload", style: .plain, target: self, action: #selector(buttonPressed))
}
@objc func buttonPressed() {
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(">>>> calling numberOfRowsInSection")
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print(">>>> \(indexPath)")
return UITableViewCell()
}
}
PlaygroundPage.current.liveView = UINavigationController(rootViewController: A())
因此,除非您执行其他操作,否则cellForRowAt
应该每reloadData()
只调用一次。
答案 1 :(得分:0)
默认情况下,在初始化视图控制器时会有一个调用,当你添加另一个时再重新加载tableView,那么它就是