몇 가지 UIBarButtonItems 및 UITextFields가 포함 된 UITableView가있는 UIToolbar가있는보기가 있습니다.TapGestureRecognizer에서 UIBarButtonItem 탭 무시 무시
아무 데나 탭이있는 텍스트 필드의 키보드를 닫으 려합니다. 따라서 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 클래스]는 NO를 반환합니다. 왜? – Leontien
슈퍼 뷰 체인에서 툴바보기까지의 거리는 어느 정도입니까? – Wain
터치의 superview입니다. view : Touch.view.superview – Leontien