Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当视图包含UICollectionView时,触摸时隐藏UITextField之外的任何位置的键盘_Ios_Uiviewcontroller_Uiscrollview_Uicollectionview_First Responder - Fatal编程技术网

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)
}