1

我有 UIControl 的子类,并且想覆盖 sendAction:to:forEvent 方法,以便我可以发送我自己的自定义 UIEvent(以便我可以保留 UIControlEvents 变量)。但是,由于我只需要处理一个 UIEvent,因此我无法保留 UIControlEvents 变量。

因此,我认为我需要重写 addTarget 方法,以便保留 UIControlEvents 变量。


主要问题:

那么有谁知道如何实现 addTarget 方法来保留它应该的功能而不覆盖它?此外,有没有人知道更好的解决方案,因为默认情况下苹果不提供此信息(通过 UIEvent 对象的 UIControlEvents 变量)。

4

1 回答 1

0

在您的子类中提供您自己的 addTarget 方法,但不要调用 super。保存目标和选项,并让自己成为该选项的目标。当针对该事件将操作方法​​发送给您时,您可以采取任何您想要的操作。

编辑:所以你有一个子类,并且想要保存添加的目标等。声明一个可变数组。当您收到此消息时:

- (void)addTarget:(id)target action:(SEL)action forControlEvents(UIControlEvents)controlEvents

在您的子类中,您可以这样添加这个可变字典:

[myArray addObject:[@"target" : target, @"action" : NSStringFromSelector(action), @"event" : [NSValue valueWithBytes:&controlEvents objCType:@encode(controlEvents)]];

虽然这乍一看似乎令人生畏,但它并不是那么复杂。

现在我们有了每个想要了解每个可能的控制事件的注册对象。您的代码现在可以决定何时或是否通知一个或多个目标有关任何 controlEvent 的方法,方法是遍历数组并找到每个想要了解某事件的对象。

然后,您的子类决定谁收到通知的任何事件。

于 2012-08-18T12:16:29.000 回答