1

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];
}
4

1 に答える 1

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で行いました)

于 2010-04-17T10:44:12.377 に答える