2016-07-06 3 views
1

Я использую UITapGestureRecognizer для определения того, какой UIView был прослушиваем на моем экране, но по какой-то причине он обнаруживает только родительский вид, например, под кодовым журналом только тег родительского представления. Как обнаружить субсветные отводы, которые присутствуют на главном экране. Пожалуйста, предложите.UITapGestureRecognizer для определения того, какой UIView был использован на моем экране

Inside View did load :- 

UITapGestureRecognizer *viewTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionForViewTapped:)]; 
    [self.view addGestureRecognizer:viewTapRecognizer]; 


-(void) actionForViewTapped:(UITapGestureRecognizer*)sender { 
    NSLog(@"view tapped"); 
    UIView *view = sender.view; 
    NSLog(@"view tag is %lu", view.tag); //Always prints parent view tag. 

    if(view.tag == 10){ 
     NSLog(@"tag1 tapped"); // not called 
    } 
    if(view.tag == 20){ 
     NSLog(@"tag 2 tapped"); // not called 
    } 
} 

ответ

3

Вы можете обнаружить subview, используя следующий код, я просто протестировал создание образца проекта.

-(void) actionForViewTapped:(UITapGestureRecognizer*)sender { 
    NSLog(@"view tapped"); 
    UIView *view = sender.view; 
    CGPoint loc = [sender locationInView:view]; 
    UIView* subview = [view hitTest:loc withEvent:nil]; 
    NSLog(@"view tag is %lu", subview.tag); //will print Subview tag. 

    if(view.tag == 10){ 
     NSLog(@"tag1 tapped"); 
    } 
    if(view.tag == 20){ 
     NSLog(@"tag 2 tapped"); 
    } 
} 
0

A UIGestureRecognizer предназначено для использования одним видом.

Если вы хотите использовать UIGestureRecognizer, вам нужно будет создать его для каждого вида, вызывая тот же метод.

Смежные вопросы