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

时间:2017-01-31 10:00:48

标签: ios swift swift3 uisearchbar uisearchcontroller

我将我的应用从UISearchBar切换到UISearchController一个屏幕。它是一个tableview控制器。根据设计,我不应该首先在UI上保留搜索栏,除非它被激活,(通常情况下,将搜索栏保持为' tableHeaderView')是一种常见的做法。问题是,我有一个搜索按钮,当点击'搜索栏'应该被激活并成为第一响应者。

点击取消按钮时,应从UI中删除。但是,当我点击“搜索栏按钮”时,在导航栏上,UISearchController被激活,提供暗淡的背景但键盘不会出现。我需要再次点击搜索栏,将键盘放在用户界面上。

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

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

我在UISearchController方法中配置viewDidLoad。如果您想要查看该部分代码,请告诉我,但它是常用代码。我确认我没有在任何地方调用resignFirstResponder()方法。

1 个答案:

答案 0 :(得分:6)

试试这个,

只需替换此行,

searchController.becomeFirstResponder()

通过以下方式

searchController.searchBar.becomeFirstResponder()

修改,

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

实现此委托方法并尝试。