Ios 当视图包含UICollectionView时,触摸时隐藏UITextField之外的任何位置的键盘
有一些答案,例如,但是如果存在Ios 当视图包含UICollectionView时,触摸时隐藏UITextField之外的任何位置的键盘,ios,uiviewcontroller,uiscrollview,uicollectionview,first-responder,Ios,Uiviewcontroller,Uiscrollview,Uicollectionview,First Responder,有一些答案,例如,但是如果存在uicrollview或UICollectionView的情况下,它不起作用。 将永远不会调用viewController上的touchsbegind方法 在屏幕上,我在顶部有一个UITextField。 下面是一个UICollectionView 如果我触摸UITextField之外的任何地方(显然包括集合视图),我需要关闭键盘 那么最好的方法是什么呢 对于这样一个常见的UI范例,似乎应该有一个众所周知的解决方案,但我还没有遇到它。要关闭视图点击时的键盘:向Vie
uicrollview
或UICollectionView
的情况下,它不起作用。将永远不会调用
viewController
上的touchsbegind
方法
在屏幕上,我在顶部有一个UITextField
。下面是一个
UICollectionView
如果我触摸
UITextField
之外的任何地方(显然包括集合视图),我需要关闭键盘
那么最好的方法是什么呢
对于这样一个常见的UI范例,似乎应该有一个众所周知的解决方案,但我还没有遇到它。要关闭视图点击时的键盘:向ViewController.collectionView添加点击手势,如下所示:
//declare a property to store your current responder
@property (nonatomic, assign) id currentResponder;
//in viewDidLoad:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)];
[singleTap setNumberOfTapsRequired:1];
[singleTap setNumberOfTouchesRequired:1];
[self.collectionView addGestureRecognizer:singleTap];
//Implement the below delegate method:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
self.currentResponder = textField;
}
//Implement resignOnTap:
- (void)resignOnTap:(id)sender {
[self.currentResponder resignFirstResponder];
}
简单的方法是:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
这里有一个更好的解决方案,它不需要在所有内容中单独添加手势识别器。它是用Swift编写的,但是可以很容易地转换成ObjC 将以下内容添加到viewDidLoad(): 然后添加以下方法声明:
func dismissKeyboard()
{
view.endEditing(true)
}
…其中
视图
是您的文本字段。您尝试过吗?如果用户点击集合视图,这会起作用,但我希望有一个更通用的解决方案来解决键盘外的任何触摸。我认为没有其他简单的方法。任何你必须在这里实现手势识别的方法。让我知道我的答案是否有用……)
func dismissKeyboard()
{
view.endEditing(true)
}