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類]似乎不適用於工具欄上的所有水龍頭。然而,使用isMemberOfClass:[UIToolbar類]檢查超級視圖是有效的。
我不明白這一點。也許有人可以解釋這種行爲?
感謝您的提示,但它沒有回答這個問題。使用NSLog語句,我可以看到UIToolbar位於水龍頭位置的視圖層次結構中。但isKindOfClass [UIToolbar類]返回NO。爲什麼? – Leontien
超視圖鏈條是多少工具欄視圖? – Wain
這是touch.view的超級視圖:Touch.view.superview – Leontien