0

在我的 iOS 应用程序中,我有 UITableView,并且在某些单元格中是一个 Switch。

我通过以下方式在 Switch 上设置了监听器:

[cell.toggle addTarget:self action:@selector(onSwitchToggle:) forControlEvents:UIControlEventValueChanged];

开关状态也可以从程序本身更新,而不仅仅是用户按下它。我遇到了 UIControlEventValueChanged 的​​一些问题,有时它似乎触发了比它应该触发的更多事件。所以我想知道这是否是(由用户)监听 Switch 状态变化的唯一方法......?

4

1 回答 1

1

我猜你正在设置addTarget内部cellForRowAtIndexPath,这是你的主要问题。

重复使用单元格(例如滚动)将多次将该目标添加到特定单元格。

最快的解决方案是将您的代码更改为:

[cell.toggle removeTarget:nil 
                   action:NULL 
         forControlEvents: UIControlEventValueChanged];
[cell.toggle addTarget:self action:@selector(onSwitchToggle:) forControlEvents:UIControlEventValueChanged]; 

这基本上可以防止目标被多次添加到切换中。不是最漂亮的解决方案,但需要考虑。

想到的一些更好的解决方案:

  • 在 下的单元格子类中添加目标awakeFromNib

  • 在您的单元格中创建该单元格StoryBoard并为其设置一个操作出口。它只会初始化一次。

于 2015-10-09T11:18:21.283 回答