当开关状态打开时,表中的UISwitch选择多个单元

时间:2017-10-20 01:37:59

标签: ios swift uitableview

我在Swift 4项目中创建了一个自定义单元格,其中包含一个开关。当我选择任何开关时,我选择表中的每个第10个开关。表中有34个单元格。我尝试了许多不同的用户交互组合启用/禁用。即使未选择的开关的状态显示为“开”,相关的动作也不会触发。以下是触发操作的代码:

@IBAction func SwitchAction(_ sender: UISwitch ) {

    let switchPosition = sender.convert(CGPoint(), to:tableView)
    let indexPath = tableView.indexPathForRow(at:switchPosition)
    let ipath = indexPath?.row
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return taskList.count

}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 75
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    //let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell")
    let cell: customTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! customTableViewCell
    cell.LabelSelect.text=taskList[indexPath.row]

    return cell
}

1 个答案:

答案 0 :(得分:0)

这是由于细胞被重复使用。滚动tableView时,某些行会离开屏幕;关联的单元格被放入队列中。其他行显示在屏幕上;调用cellForRowAt方法并从队列中获取一个单元格(因此dequeueReusableCell),用于新行。如果当单元格离开屏幕时开关打开,它将在屏幕上显示时仍然亮起 - 即使它现在与完全不同的行相关。

解决方案是维护一个数组,指示给定行的开关是打开还是关闭。然后,您可以使用该数组在cellForRowAt方法中正确设置开关。