为什么我的覆盖sendActionsForControlEvents:从未调用过?

时间:2009-08-07 14:33:52

标签: iphone

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:,我也没有得到像我应该的那样的日志消息。这是没有意义的。我已经覆盖了它。它应该记录那条消息,该死的。 %!§$%

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我不认为UIControl本身使用sendActionsForControlEvents:来调度sendAction:to:forEvent:。从我看过的小代码示例中,这个函数适用于需要将事件推送到注册目标的外部用户。

答案 1 :(得分:1)

这很奇怪,因为UIControl文档说:

  
    

当用户以对应于一个或多个指定事件的方式触摸控件时,UIControl会自行发送sendActionsForControlEvents:。这导致UIControl在sendAction:to:from:forEvent:message中将操作发送到UIApplication。

  

听起来我们应该能够覆盖sendActionsForControlEvents:,但我的重写方法也永远不会被调用。

相关问题