UIControl文档明确指出:
当用户触摸控件时 对应于一个或多个的方式 指定的事件,UIControl发送 本身sendActionsForControlEvents:。
所以我做的很简单。我创建了一个UIControl子类,并覆盖了它,如下所示:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
[super sendActionsForControlEvents:controlEvents];
NSLog(@"- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents");
}
然后我实例化了我的自定义UIControl并添加了一个像这样的动作目标:
MyCustomControl *twb = [[MyCustomControl alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 80.0f, 80.0f)];
twb.backgroundColor = [UIColor yellowColor];
[twb addTarget:self action:@selector(anyTouch:) forControlEvents:UIControlEventAllTouchEvents];
[self addSubview:twb];
另外,我为选择器实现了-anyTouch:方法,如下所示:
- (void) anyTouch:(id)sender {
NSLog(@"anyTouch");
}
会发生什么:我触摸该控件的视图,并且当我触摸它时,-anyTouch会抛出“anyTouch”日志消息。但即使我将UIControl子类化并覆盖了sendActionsForControlEvents:,我也没有得到像我应该的那样的日志消息。这是没有意义的。我已经覆盖了它。它应该记录那条消息,该死的。 %!§$%
答案 0 :(得分:3)
我遇到了同样的问题。我不认为UIControl本身使用sendActionsForControlEvents:来调度sendAction:to:forEvent:。从我看过的小代码示例中,这个函数适用于需要将事件推送到注册目标的外部用户。
答案 1 :(得分:1)
这很奇怪,因为UIControl文档说:
当用户以对应于一个或多个指定事件的方式触摸控件时,UIControl会自行发送sendActionsForControlEvents:。这导致UIControl在sendAction:to:from:forEvent:message中将操作发送到UIApplication。
听起来我们应该能够覆盖sendActionsForControlEvents:,但我的重写方法也永远不会被调用。