2013-08-23 1 views
1

У меня есть представление с UIToolbar с несколькими UIBarButtonItems и UITableView, содержащим некоторые UITextFields.Нажмите на UIBarButtonItem не игнорируется TapGestureRecognizer

Я хотел бы убрать клавиатуру для текстового поля с краном в любом месте. Поэтому я добавил к представлению TapGestureRecognizer. Чтобы избежать того, что TapgestureRecognizer обрабатывает ответвления на UIBarButtonItems, я добавил следующий метод (задан делегат).

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    UIView *view = touch.view; 
    while (view) { 
     NSLog(@"Class of view: %@", NSStringFromClass([view class])); 
     view = view.superview; 
    } 

    // Disallow recognition of tap gestures in the toolbar 
    if ([touch.view isKindOfClass:[UIToolbar class]]) { 
     return NO; 
    } 

    if ([touch.view.superview isMemberOfClass:[UIToolbar class]]) { 
     return NO; 
    } 

    return YES; 
} 

UIBarButtonItem не сам вид, но она имеет UIToolbar как его надтаблицы. Когда я использую вышеуказанный метод, проверка на isKindOfClass: [UIToolbar class], похоже, не работает для всех кранов на панели инструментов. Однако проверка надстройки с помощью isMemberOfClass: [UIToolbar class] работает.

Я этого не понимаю. Может быть, кто-то может объяснить это поведение?

ответ

0

Вы не должны полагаться на иерархию представлений вокруг классов частного вида. Это может измениться в любое время.

Лучшим подходом является добавление жестов к представлению таблицы (или другой соответствующий вид, который представляет интересующую вас область). Просто не забудьте включить и отключить жест в соответствующие моменты времени, чтобы не блокировать обычную работу таблицы.

+0

Спасибо за отзыв, но он не отвечает на вопрос. С помощью инструкции NSLog я вижу, что UIToolbar находится в иерархии представления позиции крана. Но isKindOfClass [UIToolbar class] возвращает NO. Зачем? – Leontien

+0

Как далеко вверх по цепочке супервизора отображается панель инструментов? – Wain

+0

Это супервизор touch.view: Touch.view.superview – Leontien

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

  • Нет связанных вопросов^_^