UITableView不检查Swift中的标记单元格(didSelect和didDeselect之外)

时间:2018-11-22 16:11:05

标签: ios swift uitableview swift4

我有一个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>>一样出现在日志中。我注意到的一件事是,当单元格上的文本正确显示时,它的标题不是日志所暗示的标题(尽管这是情节提要中的默认文本),这与我的问题有关吗?为什么运行此代码后未选中单元格?

1 个答案:

答案 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的视图控制器。可以在情节提要或代码中完成。