自定义UITableViewCell按钮调用了错误的目标

时间:2018-09-30 10:54:08

标签: swift uitableview tableview

我有一个奇怪的情况,我似乎无法解决。我有2部分的tableView。这两个部分具有相同的CustomTableViewCell(ShareActivityCustomTableViewCell.swift)。

每个单元格都有一个UIButton(自定义切换按钮)。

问题

当用户点击第1部分中的自定义开关按钮时,该单元将从第1部分中删除,并放置在第0部分中。该过程的这一部分工作正常。

但是,一旦重新加载tableView并用户在第0部分中点击了相同的自定义开关,应用就会崩溃,因为索引超出了范围。它将超出范围,因为当用户点击自定义开关时,它正在调用错误的目标。它应该调用:

@IBAction func toggleSwitchSection0Tapped(_ sender: UIButton)

而是调用旧目标:

@IBAction func toggleSwitchTapped(_ sender: UIButton)

我无法理解为什么发生这种情况,因为tableView重新加载正常,单元格按预期交换了位置(第1部分到第0部分)

我在cellForRowAtIndex中的代码非常简单,根据目标将以下目标添加到自定义开关中: 第0节中的cellForRowAtIndex:

cell.toggleSwitch.tag = indexPath.row
        cell.toggleSwitch.addTarget(self, action: #selector(ShareListVC.toggleSwitchSection0Tapped), for: .touchUpInside)

第1节中的cellForRowAtIndex

cell1.toggleSwitch.addTarget(self, action: #selector(ShareListVC.toggleSwitchTapped), for: .touchUpInside)

有趣的是,当出现tableView列表并且第0部分中有单元格时,当用户点击第0部分中的自定义开关时,将调​​用正确的目标。

任何帮助或建议都将不胜感激。...谢谢。

1 个答案:

答案 0 :(得分:0)

找出解决方案

因此,在我最初的帖子并重新阅读之后,我认为由于重复使用相同的单元格,每个部分中都具有相同的CustomTableViewCell可能会导致问题。

我为第0部分和第1部分创建了一个单独的CustomTableViewCell,现在一切都按预期工作了!

写下一个问题可以使您以不同的方式看待事物,这真是令人惊讶。