覆盖 addTarget 方法
Posted
技术标签:
【中文标题】覆盖 addTarget 方法【英文标题】:Override addTarget method 【发布时间】:2012-08-18 09:21:18 【问题描述】:我有 UIControl 的子类,并且想覆盖 sendAction:to:forEvent 方法,以便我可以发送我自己的自定义 UIEvent(这样我就可以保留 UIControlEvents 变量)。但是,由于我只需要处理一个 UIEvent,因此我无法保留 UIControlEvents 变量。
因此,我认为我需要重写 addTarget 方法,以便保留 UIControlEvents 变量。
主要问题:
那么有谁知道如何实现 addTarget 方法来保留它应该的功能而不覆盖它?此外,有没有人知道更好的解决方案,因为苹果默认不提供此信息(通过 UIEvent 对象的 UIControlEvents 变量)。
【问题讨论】:
【参考方案1】:在你的子类中提供你自己的 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 的方法,方法是遍历数组并找到每个想要了解某某事件的对象。
然后,您的子类决定任何事件,谁会收到关于什么的通知。
【讨论】:
那么在代码中,它看起来如何?我已经创建了自己的 addTarget 方法,但是我不知道如何“保存目标和选项,并让自己成为该选项的目标”。谢谢!以上是关于覆盖 addTarget 方法的主要内容,如果未能解决你的问题,请参考以下文章
UIControl (addTarget:action:forControlEvents:) @selector 参数