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

Posted

技术标签:

【中文标题】UISearchController 需要额外点击才能成为第一响应者【英文标题】:UISearchController Needs an extra tap to become first responder 【发布时间】:2017-01-31 10:00:48 【问题描述】:

我将我的应用程序从UISearchBar 切换到UISearchController。这是一个表格视图控制器。根据设计,除非它被激活,否则我最初不应将搜索栏保留在 UI 上(通常将搜索栏保留为“tableHeaderView”是一种常见做法)。问题是,我有一个搜索按钮,当点击“搜索栏”时应该激活并成为第一响应者。

当点击取消按钮时,它应该从 UI 中移除。但是,当我点击导航栏上的“搜索栏按钮”时,UISearchController 被激活,提供了暗淡的背景,但没有出现键盘。我需要在搜索栏上再点击一次才能将键盘显示在 UI 上。

这是我的搜索栏按钮操作:

@IBAction func onTapSearch(_ sender: AnyObject) 
    self.view.addSubview(searchController.searchBar)
    searchController.isActive = true
    searchController.becomeFirstResponder()
    isSearchActive = true
    self.navigationController?.setToolbarHidden(true, animated: false)

我在viewDidLoad 方法中配置UISearchController。让我知道您是否想查看该部分代码,但它是通常的代码。而且我确认我没有在任何地方调用resignFirstResponder() 方法。

【问题讨论】:

【参考方案1】:

试试这个,

只需替换这一行,

searchController.becomeFirstResponder()

以下内容,

searchController.searchBar.becomeFirstResponder()

编辑,

func didPresentSearchController(_ searchController1: UISearchController) 
    searchController1.searchBar.becomeFirstResponder()

实现这个委托方法并尝试。

【讨论】:

我先有那个代码。不工作,然后修改。 欢迎。如果您认为我的回答对您有所帮助,请接受它,以便对其他人有用。 是的,我一分钟都无法接受。 :) 是的,没关系。 :)

以上是关于UISearchController 需要额外点击才能成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 搜索栏点击后消失

点击时 UISearchController 会在屏幕外展开

UISearchController 中的取消按钮

UISearchController 在点击取消按钮时关闭 VC

我可以用 UISearchController 以编程方式复制 UIStatusBar 上的点击操作吗?

使用 UISearchController 时,iOS 13 UIBarButtonItem 不可点击和重叠 UINavigationBars