У меня есть представление с 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] работает.
Я этого не понимаю. Может быть, кто-то может объяснить это поведение?
Спасибо за отзыв, но он не отвечает на вопрос. С помощью инструкции NSLog я вижу, что UIToolbar находится в иерархии представления позиции крана. Но isKindOfClass [UIToolbar class] возвращает NO. Зачем? – Leontien
Как далеко вверх по цепочке супервизора отображается панель инструментов? – Wain
Это супервизор touch.view: Touch.view.superview – Leontien