如果您离开他们的视图并返回,我会对tableView的行为感到困惑。
我有一个带有一个tableView的屏幕,当我第一次进入视图时该屏幕可以工作。添加,删除和更新表格单元格的工作。但是,当我按一个按钮进入下一个视图并立即返回时,tableView
不再起作用。应该执行的代码(tableView.reload()
和所有关联的方法)按预期运行。但是,即使在内部更新数组,也不会更新屏幕,并且重新加载运行并执行应更新屏幕的代码(即tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
运行正常)。
我想念什么?如果我离开视图并返回ti,tableView是否需要任何特殊处理?
谢谢。
编辑:
tableView类似于以下类的代码:
class DebugViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var table: UITableView!
var array = [M]()
override func viewDidLoad() {
super.viewDidLoad()
self.searchbar.delegate = self
self.table.delegate = self
self.table.dataSource = self
search_view = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Search_view") as? SomeViewController
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cellManage") as? TableCellManage else { return UITableViewCell() }
let idx = indexPath.row
let value = array[idx]
cell.lbl_time.text = value.month
cell.lbl_background.text = value.color
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 130
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.array.count
}
@IBAction func tapped_addsongs(_ sender: Any) {
self.present( search_view, animated: true, completion: nil)
}
}
答案 0 :(得分:1)
tableView.reload()部分在哪里?由于您尝试在后台线程中更新表,因此可能会产生此问题。所有UI更新必须在主线程中完成:
func someFunc() {
...
DispatchQueue.main.async {
tableView.reload()
}
...
}
答案 1 :(得分:0)
查看了应用程序生命周期的漂亮图片并进行了谷歌搜索之后,我发现了问题和解决方案。
问题是我设置了侦听器以麻烦的方式更新我的表视图。具体来说,我当时使用viewDidAppear / viewDidDisappear调高和调低了侦听器,因此管理状态的代码中存在一些冲突。
相反,我现在在viewDidLoad上调出侦听器。它们保持活动状态,而不管要推送多少视图(在合理的范围内,但我只推送了一个),并更新我的表视图,以便当我回到该视图时,所有内容都已更新。我什至都看不到更新的发生,它们是在我看到之前发生的。至于分离监听器,有一个方便的功能,直到5分钟前我才知道:deinit。这相当于Swift中的析构函数,因此当我的视图的类对象从内存中释放时,我就分离了侦听器。
这解决了我的问题……并提高了性能,并且我不再因管理好听众而失去联系。因此,双赢。
谢谢大家的帮助!我希望这对其他人有帮助。