当视图包含UICollectionView时,在UITextField外的任何位置隐藏键盘

sol*_*eil 5 uiscrollview uiviewcontroller first-responder ios uicollectionview

有一些答案在那里如,但在那里有一个情况UIScrollView还是UICollectionView存在,这是行不通的.
touchesBegan对方法viewController永远不会被调用.

在屏幕上,我有一个UITextField在顶部.
在此之下,填满屏幕的其余部分是一个UICollectionView.
如果我触摸除了UITextField(显然包括集合视图)之外的任何地方我需要关闭键盘

那么最好的方法是什么?

对于这样一个常见的UI范例,似乎应该有一个众所周知的解决方案,但我还没有碰到它.

Pri*_*wal 4

要在点击视图时关闭键盘:将点击手势添加到 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];
}
Run Code Online (Sandbox Code Playgroud)