我的静态 UITableView
包含 n 列和1个部分。详细信息包含从另一个UIViewController
传递的一些动态内容。
我的解决方案如下:我在viewDidAppear
中打电话来呈现动态内容并最终重新加载视图:
override func viewDidAppear(_ animated: Bool) {
setupDetails()
}
fileprivate func setupDetails() {
tableView.cellForRow(at: [0,0] as IndexPath)?.detailTextLabel?.text = "..."
tableView.cellForRow(at: [0,1] as IndexPath)?.detailTextLabel?.text = "..."
// .... multiple cells
tableView.reloadData()
}
我不喜欢的是在向用户显示视图后更新内容(感谢viewDidAppear
调用)。
对于处理cellForRow()
方法的问题,鉴于在我的Storyboard中静态创建了单元格,我无法使用它。
我的问题是,在这个具体案例中是否存在一种我没有想到的模式。我基本上希望在显示视图之前加载视图,就好像我正在使用动态单元格一样。
答案 0 :(得分:1)
我的问题是,是否存在要在此特定情况下使用的模式
是。不要使用静态表。你的桌子不是是静态的! “静态”意味着“永不改变”。你的桌子与静电相反;它 更改。这是动态的!
所以,使用普通的动态表。维护三大问题(数据源方法)咨询的数据模型。要使用新数据更新表,请先更新数据模型,然后调用reloadData
。这将导致cellForRowAt
被称为,并且您将从数据模型中填充每个单元格。这比你正在做的更有效 。
至于闪光灯,这只是时间问题;使用viewWillAppear
代替viewDidAppear
。
答案 1 :(得分:1)
如果您不希望更改为向用户显示,请不要使用ViewDidAppear。使用ViewWillAppear,当用户第一次看到视图时,视图已经处于最终状态。