我已经看过帖子UITableView.reloadData() is not working。我不确定这是否适用于我的情况,但是如果我错了,请告诉我。
我的应用程序具有tableView。从主viewController中,我打开另一个viewController,创建一个新对象,然后将该对象传递回原始viewController,在此将其添加到名为timers的数组中。所有这些都很好。但是,当我在didUnwindFromNewTimerVC()中调用tableView.reloadData()以显示timers数组的更新内容时,没有任何反应。
注意:我已经验证了timers数组已使用新对象进行了更新。它的计数增加,我可以访问它的成员。 didUnwindFromNewTimerVC()中的所有其他内容均正常执行。 tableView只是没有更新以反映它。
这是我的代码:
import UIKit
class TimerListScreen: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tabelView: UITableView!
var timers = [Timer]()
let tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
tabelView.delegate = self
tabelView.dataSource = self
let tempTimer = Timer(timerLabel: "temp timer")
timers.append(tempTimer)
}
@IBAction func didUnwindFromNewTimerVC(_sender:UIStoryboardSegue){
guard let newTimerVC = _sender.source as? newTimerVC else{return}
newTimerVC.timer.setTimerLabel(timerLabel: newTimerVC.timerLabel.text!)
timers.append(newTimerVC.timer)
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tabelView.dequeueReusableCell(withIdentifier: "TimerCell", for: indexPath) as? TimerCell{
let timer = timers[indexPath.row]
cell.updateUI(Timer: timer)
return cell
}else{
return UITableViewCell()
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return timers.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 78
}
}
谢谢
答案 0 :(得分:0)
请注意拼写。有两个表视图实例:插座 tab el View 和一个(无意义的)实例 tab le View 。
重新加载插座的数据
tabelView.reloadData()
并删除第二个实例let tableView ...
的声明行。
但是,我建议将插座重命名为拼写正确的tableView
(您可能需要在Interface Builder中重新连接插座)。
强行拆开电池
let cell = tabelView.dequeueReusableCell(withIdentifier: "TimerCell", for: indexPath) as! TimerCell
并删除if - else
部分。如果一切都正确连接到IB中,则代码不得崩溃。