我有一个UITableView
,允许用户选择单元格,当它们设置时,我将cell.accessoryType
设置为.checkmark
。我的应用程序的设置方式是,用户应转到“主” ViewController,选择到TableView,选择一些单元格,然后重复此过程几次。我的问题是我不希望用户已经做出的tableView选择消失。我已经尝试过self.clearsSelectionOnViewWillAppear = false
,但是它不起作用。因此,我制作了一个数组,其中包含用户选择的单元格的所有indexPaths,因此,当用户转到“主” ViewController并返回时,我希望我的应用实质上重新选择那些单元格。
这是我用于此过程的代码...
for row in selectedRows {
print("Reselecting: \(row)")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: row)
print(cell)
cell.accessoryType = .checkmark
}
当我打印单元格时,它会像这样<UITableViewCell: 0x7fc2f90f3e00; frame = (0 0; 375 44); text = 'Title'; clipsToBounds = YES; layer = <CALayer: 0x600000aae260>>
一样出现在日志中。我注意到的一件事是,当单元格上的文本正确显示时,它的标题不是日志所暗示的标题(尽管这是情节提要中的默认文本),这与我的问题有关吗?为什么运行此代码后未选中单元格?
答案 0 :(得分:0)
我认为您应该使用tableView(_:cellForItemAt:)
协议中的UITableViewDataSource
。
func tableView(_ tableView: UITableView, cellForItemAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "<your reusable identifier", for: indexPath) as! YourCellSubclassIfAny
cell.accessoryType = isIndexPathSelected(indexPath) ? .checkmark : .none
// do whatever setup you need
return cell
}
当然,您需要设置dataSource
的{{1}}(如果不使用tableView
。通常将其设置为包含UITableViewController
的视图控制器。可以在情节提要或代码中完成。