表格视图标记多个单元格Swift 3

时间:2017-02-10 12:16:35

标签: ios swift uitableview

我有一个非常讨厌的问题。

我有一个包含或多或少50个单元格的tableView,显示了一些选项,我可以选择我想要的选项。我在Apple的文档中读到,默认情况下,单元格在不显示时会被重用。有了这个,如果我选择第一个单元格,就会标记每6个单元格1,也就是说,如果我选择前6个单元格,则会标记表格中的所有单元格!

我的表格视图允许多项选择。选择是这样的:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}

我该如何解决这个问题?我知道你有这样一个" prepareForReuse()"对于子类,那会是解决方案吗?如果是这样,你能举例说明你会怎么做吗?

3 个答案:

答案 0 :(得分:3)

这里有代码可以帮助你

var arr_selectedindePath = NSMutableArray()
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
        if arr_selectedindePath .contains(indexPath) {

            arr_selectedindePath .remove(indexPath)
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
        }
        else
        {
          arr_selectedindePath .add(indexPath)
            tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
        }

    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {

        let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")!
        if arr_selectedindePath .contains(indexPath) {
           cell.accessoryType = .checkmark
        }
        else
        {
          cell.accessoryType = .none
        }

    }

答案 1 :(得分:2)

您需要相应地更新数据模型,以便在调用cellForRowAtIndexPath时显示包含更新内容的单元格。

如果不使用数据模型,则需要将indexPath存储在可变数组中,并检查当前indexPath是否已标记。

希望这有帮助。

答案 2 :(得分:-1)

在自定义单元格中

1 创建代理

protocol CellDelegate {

    func didTapOnButton(_ cell:Cell)

}

<强> 2 即可。 声明代理

var delegate:CellDelegate?

3.Override this method

override func prepareForReuse() {
        super.prepareForReuse()
        self.delegate = nil
    }


@IBAction func buttonTapped()
{
    self.delegate!.didTapOnButton(self)
}

在您的tableview控制器中

1.实施委托方法

2.Inside cellForRowAtIndexPath将标签值分配给cell.button

3.实施此方法

 func didTapOnButton(_ cell: Cell) {
                print("off button clicked at index \(cell.button.tag)")

            }