2012-11-28 29 views
0

我有一個UITiew與UITapGestureRecognizer和頂部我使用textFields和複選框。我想用這個gestureRecongizer通過點擊其他任何地方來移除鍵盤。如何取消我的複選框的UITapGestureRecognizer的功能?

但知道我的複選框調用recongizer的選擇器? 我該如何避免這種行爲?我已經嘗試了exclusiveTouch屬性,但它不起作用。

任何人都可以爲我推薦這個問題的好工作流程?

回答

0

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,你可以用任何其他方法來確定是否是你的複選框)

+0

這個解決方案真的很好很容易 - 謝謝:) btw。我的情況是: if(touch.view == self.button).. – user123456789

0

你是複選框可能是一個自定義的代碼位?一個按鈕或其他類型的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 
} 
+0

是的,他們在代碼中的自定義和是它的工作原理,謝謝。 但我沒有提到我有2個複選框和一個被這個識別器感染的按鈕。如果我爲每個按鈕/複選框添加一個自己的附加的gestureRecognizer,這不是一個非常漂亮的解決方案,不是嗎? 有沒有更好的方法? – user123456789

+0

您可以設置複選框和按鈕的標籤,然後在單處理程序功能中檢查標籤並確定您的操作。 – ophychius

0

我發現了一個甚至第三更簡便的方法!

我用手勢財產「cancelsTouchesinview」並將其設置爲「否」

gesture.cancelsTouchesinview = NO; 
相關問題