親viewにGestureを割り当てるとsubviewにイベントが発生しない(怒!)

subview以外の場所をタップされたときに何か親View側で処理したいなー、とか、そんな軽い気持ちで親viewにUITapGestureRecognizerとかを仕込んじゃうと、subviewでUIButton等のイベントが動かなくなっちゃいます。
iOS6では発生しないので、iOS5のバグだろうと思いますけど。

こんな感じで回避できます。


//親ビューにUIGestureRecognizerDelegateを指定
@interface ViewController : UIViewController<UIGestureRecognizerDelegate >

//タップジェスターを仕込む時にdelegateを設定しておく
UITapGestureRecognizer* tap =   
  [[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTapView:)]autorelease];
tap.delegate = self; 
[self.view addGestureRecognizer:tap];


#pragma mark - UIGestureRecognizerDelegate
-(BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    //iOS6未満でsuperviewのジェスチャーが優先されてしまうバグ(?)を回避
    if (touch.view != gestureRecognizer.view
        && [touch.view isKindOfClass:[UIControl class]])
    {
        return false;
    }
    return true;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です