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]とかで座標をとって制御とかも使えそう。