UITableView
默认情况下会重用单元格。但是在我的情况下,某些单元格有一个UITextField
对象,当单元重用时,我不想失去其值。该表有几行,因此我可以处理内存中的所有单元格。
我当前使用的代码示例:
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "TPAddressInfoTableViewCell", bundle: nil), forCellReuseIdentifier: InfoCellIdentifier)
...
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.row]
switch item.appearance {
case .textWithTitle:
let cell = tableView.dequeueReusableCell(withIdentifier: InfoCellIdentifier) as! TPAddressInfoTableViewCell
return cell
case .picker:
...
如何正确保留此类细胞?在这种情况下,将每个单元格的UITextFieldDelegate
链接到当前的UIViewController
似乎是多余的。
答案 0 :(得分:4)
不保留单元格。
在数据模型中保存单元格的UI元素的所有值,并在cellForRow
中恢复值。
例如,将相应的模型项传递到cellForRow
中的单元格,并在文本字段字符串更改时将其保存在属性中。
或者,使用回调闭包来更新控制器中的属性。