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

Ram*_*sad 4 uisearchbar ios swift uisearchcontroller swift3

我将应用程序从一个屏幕切换UISearchBarUISearchController.这是一个tableview控制器.根据设计,我不应该首先在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)
}
Run Code Online (Sandbox Code Playgroud)

UISearchController在我的viewDidLoad方法中配置.如果您想要查看该部分代码,请告诉我,但这是通常的代码.我确认我不会在resignFirstResponder()任何地方调用任何方法.

KAR*_*KAR 6

试试这个,

只需更换此行,

searchController.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

有了这个,

searchController.searchBar.becomeFirstResponder()
Run Code Online (Sandbox Code Playgroud)

编辑,

func didPresentSearchController(_ searchController1: UISearchController) {
    searchController1.searchBar.becomeFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)

实现此委托方法并尝试.