1

我有一个包含四行的 UITableView。每行都有一个带有 DCRoundSwitch 的自定义单元格。value-changed 事件在 IB 中链接到 switchChanged 方法。每次在 cellForRowAtIndexPath 中需要一个带有开关的新单元时,我都会将新单元的开关分配给 ivar,这样我就可以像这样以编程方式控制它:

       self.categorySwitch = ((FilterViewCell *)cell).sectionSwitch; 

在我第一次触摸开关后它完美地工作,触发了 switchChanged 方法。

问题:每次需要一个新的单元格或重新加载表时,它都会触发switchedChanged 方法而不接触开关。我已经尝试像这样在 switchChanged 方法的末尾删除所有目标,但它仍然不起作用:

       [theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];

这可以完美地使用 UISwitch。

有什么建议么?DCRoundSwitch 似乎是一个很好的选择,我想使用它。

谢谢

4

2 回答 2

1

尝试将事件更改为 UIControlEventTouchUpInside,如下所示...

   [theSwitch removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];

还要更改 setOn:animated: DCRoundSwitch.m 文件中的方法中的事件

   [self sendActionsForControlEvents:UIControlEventTouchUpInside];
于 2012-09-25T15:26:43.167 回答
1

在 DCRoundSwitch.m 文件中,定位方法:

- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents

删除这两行:

[[self allTargets] makeObjectsPerformSelector:@selector(retain)];
[[self allTargets] makeObjectsPerformSelector:@selector(release)];
于 2012-11-28T09:59:29.650 回答