让搜索栏成为第一响应者

Posted

技术标签:

【中文标题】让搜索栏成为第一响应者【英文标题】:Make Search Bar Become First Responder 【发布时间】:2017-01-15 01:40:29 【问题描述】:

我在UINavigationBar 中有一个UISearchController。用户必须点击UIBarButtonItem,我在其中实例化一个新的UIViewController,然后呈现它,以便开始搜索。

class ViewController: UIViewController 

  var searchController: UISearchController! 

  override func viewDidLoad() 
    super.viewDidLoad()
    setupSearchController()
  

  func setupSearchController() 
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.searchBar.showsCancelButton = true
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = false

    definesPresentationContext = true
    navigationItem.titleView = searchController.searchBar
  


我之前做了很多研究,但仍然无法找到解决方案......

非常感谢帮助使搜索控制器成为第一响应者。

【问题讨论】:

【参考方案1】:

使UISearchBar 成为主线程上的第一响应者是solution。

override func viewDidAppear(_ animated: Bool) 
  super.viewDidAppear(animated)

  DispatchQueue.main.async 
    self.searchController.searchBar.becomeFirstResponder()
  

【讨论】:

太棒了!使用此解决方案,无论 ios 版本如何,它都能正常工作。 这也适用于 iOS 13。 Fking Apple 及其无意义的实现。 它在 iOS 12 中崩溃,但在 13 中正常。

以上是关于让搜索栏成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 需要额外点击才能成为第一响应者

搜索栏没有收到触摸

第一响应者时 UISearchBar 上的平移手势

视图加载时使 UISearchBar 成为第一响应者

当 UISearchBar 成为横向的第一响应者时,模态视图移动

Xamarin:UISearchController 没有成为第一响应者,并且在将其添加到导航栏时没有开始编辑