Ios 以编程方式显示导航栏';s UISearchController
我在Ios 以编程方式显示导航栏';s UISearchController,ios,swift,uinavigationcontroller,uisearchcontroller,Ios,Swift,Uinavigationcontroller,Uisearchcontroller,我在viewdiload()中配置了uisearch控制器,如下所示: 虽然我已将设置为活动的,并将搜索栏设置为第一响应者,但当视图显示在屏幕上时,UISearchController未处于活动状态。手动点击该字段可正确打开该字段 在iOS 12中,isActive和becomeFirstResponder属性在viewDidLoad中不受尊重有什么原因吗?不确定那里发生了什么,但它在导航栏中是独一无二的 不过,这似乎奏效了 override func viewWillAppear(_ anim
viewdiload()中配置了uisearch控制器
,如下所示:
虽然我已将设置为活动的
,并将搜索栏
设置为第一响应者
,但当视图显示在屏幕上时,UISearchController未处于活动状态。手动点击该字段可正确打开该字段
在iOS 12中,
isActive
和becomeFirstResponder
属性在viewDidLoad
中不受尊重有什么原因吗?不确定那里发生了什么,但它在导航栏中是独一无二的
不过,这似乎奏效了
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}
在我的例子中,在iOS 12.x中,我只是将
becomeFirstResponder()
放在视图中,稍微延迟0.1秒。添加这样的延迟可以保证键盘的显示
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.definesPresentationContext = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.searchController.searchBar.becomeFirstResponder()
}
}
我希望这有帮助
编辑:如果你支持iOS 10和iOS 11,我过去的这个答案可能会帮助你 使用DispatchQueue.main.async…
时不需要弱self,谢谢您的回答,但不希望延迟代码块的执行。这取决于您。这不会冻结用户界面,我知道,这是展示搜索栏键盘的唯一方式。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.definesPresentationContext = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.searchController.searchBar.becomeFirstResponder()
}
}