ios - 点击手势识别器妨碍选择 Collection View 单元格

标签 ios swift uicollectionview uicollectionviewcell

我有一个 UICollectionView,我可以使用 UISearchBar 搜索它。我将其设置为当用户点击屏幕上的任意位置时,键盘将消失。

viewDidLoad() 中:

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.dismissKeyboard))
view.addGestureRecognizer(tap)

然后:

@objc override func dismissKeyboard() {
    view.endEditing(true)
    searchBar.endEditing(true)
}

它可以关闭键盘,但是这个点击手势识别器妨碍了选择 UICollectionView 单元格。 didSelectItemAt 方法将不起作用。

在这里查看另一个答案,我设法通过删除手势识别器并在 didSelectItemAt 中添加 dismissKeyboard() 来稍微修复它。但是,现在它只会在您点击单元格然后选择该项目时才会消失(我不想要,我只想让键盘消失)。

我如何做到这一点,以便在显示键盘时点击屏幕上的任意位置将其关闭,之后 UICollectionView 单元格可以工作并可以被选中?

谢谢!

最佳答案

您需要在您的 View Controller 中扩展 UIGestureRecognizerDelegate 并添加这段代码。然后点击手势将不适用于 collectionview,并在其余 View 中正常运行。

 func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {

    if touch.view != self.yourCollectionView{
        return false
    }else{
        return true
    }

}

关于ios - 点击手势识别器妨碍选择 Collection View 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776661/

相关文章:

ios - 内存泄漏 UICollectionView

iOS PencilKit 不绘图

ios - 为 App Store 准备不同分辨率的 App Preview 视频

iOS UIWebView 限制

ios - 无法理解崩溃日志部分应用转发器来关闭 #1

类似viewDidLoad()的iOS函数

c# - 如何从 UICollectionElementKindSection.Header 转换为 NSString?

ios - 如何为 iOS 和 OSX 构建 OpenSSL

swift - 将模块名称设置为不同于 SwiftPM 中的目录名称

ios - 画外音只能看到一个uicollectionview的页面