我在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
}
答案 0 :(得分:0)
这是由于细胞被重复使用。滚动tableView时,某些行会离开屏幕;关联的单元格被放入队列中。其他行显示在屏幕上;调用cellForRowAt
方法并从队列中获取一个单元格(因此dequeueReusableCell
),用于新行。如果当单元格离开屏幕时开关打开,它将在屏幕上显示时仍然亮起 - 即使它现在与完全不同的行相关。
解决方案是维护一个数组,指示给定行的开关是打开还是关闭。然后,您可以使用该数组在cellForRowAt
方法中正确设置开关。