[英]Detect tap on UIView's "empty space"
我有一個看起來像這樣的視圖層次結構
UIScrollView
|
+- UIView
|
+- UITextField
+- UITextField
+- UIButton
我想要的是點擊其中一個文本字段並在屏幕上看到鍵盤的用戶能夠點擊 UIView 的“空白空間”來隱藏鍵盤。 因此,例如,我不希望來自 UIButton 的事件冒泡到 UIView(如果我將 UITapGestureRecognizer 添加到 UIView 會發生這種情況)。
我怎樣才能實現所需的功能?
在viewDidLoad
方法中添加此手勢識別器:
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
gestureRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gestureRecognizer];
然后添加dismissKeyboard
方法:
- (void) dismissKeyboard{
[YOURFIELDHERE resignFirstResponder];
}
您還需要添加此按鈕以使按鈕仍然可以單擊並且不被手勢識別器覆蓋:
gestureRecognizer.delegate = self; // in viewDidLoad
<UIGestureRecognizerDelegate> //in your header file
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
}
return YES; // handle the touch
}
我遇到了同樣的問題,並用一個天真的解決方案來解決它。
在View Controller中創建一個處理觸摸事件的IBAction方法。 在這種情況下,我們將從視圖的子視圖中撤消任何第一響應者。
- (IBAction)backgroundTapped:(id)sender { [contentView endEditing:YES]; }
contentView只是指向View的實例變量。 你可以任意命名。 當您將消息endEditing
傳遞給View時,它實際上會告訴其子視圖重新endEditing
第一個響應者,從而解除鍵盤。
通過Interface Builder連接目標(視圖)和操作(剛剛創建的IBAction方法),打開View的connection inspector
,選擇Touch Up Inside
並將其拖到File的Owner對象,然后選擇方法的名稱。
希望它有所幫助。
我知道它有點晚了,但快速,簡單的解決方案如下:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES];
}
如果點擊任何空白區域,它就會被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.