【发布时间】:2020-12-30 02:07:02
【问题描述】:
自定义UIViewController 包含UICollectionView。 UISearchBar 应放置在 collectionView 的最顶部并随其内容滚动。如果用户在内容中输入搜索文本,则 collectionView 应更新,而 searchBar 保持其 FirstResponder 状态。
有些事情似乎很容易实现。
我发现了其他几个涉及某种问题的主题,但它们都是几年前的,并且所提出的解决方案都没有奏效。 我想知道 2020 年使用 Xcode 11 和 iOS 13 解决这个问题的最佳解决方案是什么。
什么不起作用:
- 我已将
UISearchBar添加到第一部分的标题中。重新加载完整的 contentView 或其部分时,searchBar 会丢失 firstResponder 并关闭键盘。 - 我已将
UISearchBar作为子视图添加到collectionView 并使用collectionViews contentOffset 将内容放置在搜索栏下方。虽然 searchBar 是 collectionVies 动态视图层次结构的一部分,但问题与之前相同:重新加载完整的 contentView 或其部分时,searchBar 失去 firstResponder 并且键盘被关闭。 - 我在 collectionView 中添加了一个 extras 部分,它只显示其标题(包括 searchBar)机器人而不是内容。重新加载其他部分但保留此“搜索部分”时,键盘将被关闭。
-
collectionView.performBatchUpdates使用与否没有区别。 - 在 collectionView 或其部分工作后重置 firstResponder 状态。但是在这种情况下,键盘会被关闭并立即重新出现。这种方式无法快速打字,而且键盘的闪烁很烦人。
是否有任何已知的干净方法来解决这个问题?
【问题讨论】:
标签: ios swift uicollectionview uisearchbar first-responder