У меня есть представление с UIToolbar с несколькими UIBarButtonItems и UITableView, содержащим несколько UITextFields.
Я хотел бы отключить клавиатуру для текстового поля одним касанием в любом месте. Поэтому я добавил в представление 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] не работает для всех нажатий на панели инструментов. Однако проверка супервизора с помощью isMemberOfClass:[UIToolbar class] работает.
Я этого не понимаю. Может быть, кто-то может объяснить такое поведение?