iPhone - 如何跟踪触摸并同时允许按钮点击?

时间:2010-04-17 10:31:28

标签: iphone uibutton uitouch

我想知道如何在iPhone屏幕上的任何地方跟踪触摸,并且仍然有UIButtons响应水龙头。

我将UIView子类化,使其成为全屏和层次结构中的最高视图,并覆盖其pointInside:withEvent方法。如果我返回YES,我可以跟踪屏幕上任何位置的触摸,但按钮没有响应(可能是因为视图被指示处理和终止触摸)。如果我返回NO,则触摸通过视图并且按钮响应,但我无法跟踪触摸。

我是否需要子类化UIButton,或者这可以通过响应者链吗?我做错了什么?

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    return NO;
}   

//only works if pointInside:withEvent: returns YES.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        NSLog(@"began");    
        [self.nextResponder touchesBegan:touches withEvent:event];
}

//only works if pointInside:withEvent: returns YES.
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        NSLog(@"end");      
        [self.nextResponder touchesEnded:touches withEvent:event];
}

1 个答案:

答案 0 :(得分:1)

而不是拥有额外的视图,您可以将应用程序主窗口子类化并跟踪触摸(以及其中的其他事件)

@interface MyAppWindow : UIWindow
...
@implementation MyAppWindow

- (void)sendEvent:(UIEvent*)event {
    [super sendEvent:event];

    if (event.type == UIEventTypeTouches){
         // Do something here
    }
   return;  
}

然后将您的应用程序窗口类型设置为MyAppWindow(我在IB的MainWindow.xib中执行了此操作)