我有一個UITiew與UITapGestureRecognizer和頂部我使用textFields和複選框。我想用這個gestureRecongizer通過點擊其他任何地方來移除鍵盤。如何取消我的複選框的UITapGestureRecognizer的功能?
但知道我的複選框調用recongizer的選擇器? 我該如何避免這種行爲?我已經嘗試了exclusiveTouch屬性,但它不起作用。
任何人都可以爲我推薦這個問題的好工作流程?
我有一個UITiew與UITapGestureRecognizer和頂部我使用textFields和複選框。我想用這個gestureRecongizer通過點擊其他任何地方來移除鍵盤。如何取消我的複選框的UITapGestureRecognizer的功能?
但知道我的複選框調用recongizer的選擇器? 我該如何避免這種行爲?我已經嘗試了exclusiveTouch屬性,但它不起作用。
任何人都可以爲我推薦這個問題的好工作流程?
1-註冊爲您識別委託tapRecognizer.delegate = self;
(聲明你是UIGestureRecognizerDelegate)
2-實施shouldReceiveTouch
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
}
3-檢查touch.view如果決定手勢應該照顧這一點。在你的情況下,如果其複選框視圖返回NO。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[yourCheckboxClass class]]) {
return NO; // ignore the touch
}
return YES;
}
(你不必使用isKindOfClass,你可以用任何其他方法來確定是否是你的複選框)
你是複選框可能是一個自定義的代碼位?一個按鈕或其他類型的UIView,只要它們是UIView的子視圖,並且沒有自己的處理方法(例如UITextField),它們最終會調用它們的superviews識別器。
所以你可以通過給每個複選框選擇自己的識別器,讓它們處理所有發生的事情,或者對所有複選框進行識別。這可以處理您的點擊以選中或取消選中該複選框。
例如,沿線的東西。
- (void) viewDidLoad
{
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap):];
[singleTap setNumberOfTapsRequired:1];
[checkbox addGestureRecognizer:singleTap];
}
- (void) handleSingeTap: (id) sender
{
//check/uncheck the apropriate chexbox
}
是的,他們在代碼中的自定義和是它的工作原理,謝謝。 但我沒有提到我有2個複選框和一個被這個識別器感染的按鈕。如果我爲每個按鈕/複選框添加一個自己的附加的gestureRecognizer,這不是一個非常漂亮的解決方案,不是嗎? 有沒有更好的方法? – user123456789
您可以設置複選框和按鈕的標籤,然後在單處理程序功能中檢查標籤並確定您的操作。 – ophychius
我發現了一個甚至第三更簡便的方法!
我用手勢財產「cancelsTouchesinview」並將其設置爲「否」
gesture.cancelsTouchesinview = NO;
這個解決方案真的很好很容易 - 謝謝:) btw。我的情況是: if(touch.view == self.button).. – user123456789