我有一个包含四行的UITableView。每行都有一个带DCRoundSwitch的自定义单元格。值更改事件在IB中链接到switchChanged方法。每次在cellForRowAtIndexPath中需要一个带有开关的新单元时,我将新单元的开关分配给一个ivar,这样我就可以这样编程控制它:
self.categorySwitch = ((FilterViewCell *)cell).sectionSwitch;
第一次触摸开关完美后,触发switchChanged方法。
问题: 每次需要新单元格或重新加载表格时,它都会触发切换的切换方法,而不会触摸开关。我已经尝试在switchChanged方法结束时删除所有目标,但它仍然无效:
[theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];
使用UISwitch完美无缺。
有什么建议吗? DCRoundSwitch似乎是一个很好的选择,我想使用它。
由于
答案 0 :(得分:1)
尝试将事件更改为UIControlEventTouchUpInside,如下所示...
[theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
同样在DCRoundSwitch.m文件中的setOn:animated:方法中更改事件
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
答案 1 :(得分:1)
在DCRoundSwitch.m文件中,找到方法:
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents
删除这两行:
[[self allTargets] makeObjectsPerformSelector:@selector(retain)];
[[self allTargets] makeObjectsPerformSelector:@selector(release)];