taoru's memo

Objective-c,cocos2d,など開発についてのメモ(andoroidも少しだけ)

subviewをタッチした場合にUIGestureRecognizerのイベントを無視する

UITapGestureRecoginizerや、UISwipeGestureRecognizerでviewにgestureイベントを取得するようにセットしていた場合、
タッチイベントがsubviewにいかなくなってしまう。

しかし、tableviewをタップされた場合はtableviewだけにイベントがいってほしい!
ということがあったので、回避したときのメモ。

delegate宣言

@interface MyViewController :UIViewController <UIGestureRecognizerDelegate>

UITapGestureRecognizerにdelegateをセット

UITapGestureRecognizer *tapGesture = [[[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(handleTapGesture:)] autorelease];
tapGesture.delegate = self;
[self.view addGestureRecognizer:tapGesture];

delegateメソッドでgestureを無視したい条件のときにfalseを返す

#pragma mark - UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // gestureをセットしたview以外がタッチされた場合はgestureを無視
    if (touch.view != gestureRecognizer.view)
    {
        return false;
    }
    return true;
}

これでUIScrollViewだったり、UITableViewにイベントがいくはず。
[touch locationInView:touch.view]とかで座標をとって制御とかも使えそう。

QLOOKアクセス解析