2016-10-01 1 views
1

私は2つのビューを持っています。 1つはサブビューを含む透明なビューです。親ビューをクリックした場合にのみscreenViewを削除したい私はpopUpViewをクリックするとtapGestureを呼びたくない。確認する方法は?タッチジェスチャーイベントが呼び出されたときに親ビューまたはサブビューのどちらが表示されるかを確認するにはどうすればよいですか?

screenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]; 
screenView.backgroundColor = [UIColor clearColor]; 
UITapGestureRecognizer * clearTable = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clearTableViewAction:)]; 
[clearTable setNumberOfTapsRequired:1]; 
[screenView setUserInteractionEnabled:YES]; 
[screenView addGestureRecognizer:clearTable]; 
screenView.tag = 100; 
[self.view addSubview:screenView]; 

self.popUpView = [[UIView alloc]init]; 
self.popUpView.frame = ... 
self.popUpView.backgroundColor = WhiteColor; 
self.popUpView.userInteractionEnabled = YES; 
self.popUpView.tag = 200; 
[screenView addSubview:self.popUpView]; 

-(void)clearTableViewAction:(UITapGestureRecognizer*)sender { 
    if(sender.view.tag == 100){ 
     [UIView animateWithDuration:0.2 
        animations:^{screenView.alpha = 0.0;} 
        completion:^(BOOL finished){ [screenView removeFromSuperview]; 
     }]; 
    } 
} 
+0

userInteractionEnabledにNOを指定した場合。まだTapGestureが呼び出されています。 – Balasubramanian

答えて

1

使用shouldReceiveTouchデリゲートメソッドとチェック:

と同様に、今

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view.tag == 100) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 

あなたはpopUpViewをクリックする場合は、clearTableViewActionジェスチャーメソッドが呼び出されません。

+1

ありがとうございました。それは働いた。シンプルできれい。 – Balasubramanian

+0

偉大な... HTH:)@ Balasubramanian –

関連する問題