允许在UISearchController处于活动状态时选择单元格

时间:2018-10-02 12:08:04

标签: ios swift uicollectionview uikit

我有一个UICollectionViewController,其中一个UISearchController嵌入了父UINavigationController的导航栏中。 我使用的单元格是UICollectionViewCell的自定义子类,其中包含单个UIImageView

但是,在搜索时,我无法选择通过搜索找到的单元格。当搜索控制器未处于活动状态时,选择/点击单元格可以完美工作,而且我已经尝试this回答而没有成功。

这是我的搜索设置代码:

searchController.searchResultsUpdater = self
searchController.definesPresentationContext = true
searchController.searchBar.keyboardAppearance = .default
searchController.obscuresBackgroundDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false

navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false

在解决此问题方面,我将不胜感激

1 个答案:

答案 0 :(得分:0)

在和UICollectionView玩了一会儿之后,发现了它。

我正在覆盖touchesBegan,如下所示:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard !searchController.isActive else { return }
    super.touchesBegan(touches, with: event)
    UIView.animate(withDuration: 0.1) { () -> Void in
        let shrinkTransform = CGAffineTransform.init(scaleX: 0.9, y: 0.9)
        self.transform = shrinkTransform
    }
}

问题是我在调用super.touchesBegan之前检查搜索控制器是否处于活动状态,这在搜索控制器处于活动状态时会阻止触摸。

将保护声明移到super.touchesBegan调用的正下方,解决了我的问题。

希望这可以帮助碰巧遇到类似问题的其他任何人!