【发布时间】:2021-05-10 22:42:20
【问题描述】:
我正在尝试在“设置”>“通用”>“iPhone 存储”>“搜索”中重新创建搜索屏幕。这是一个模态显示的屏幕,导航栏中的 UISearchController 始终处于活动状态,键盘在屏幕出现后出现,点击取消会关闭屏幕而不是停用搜索模式。
我遇到的问题是直到viewDidAppear 才能激活搜索控制器,因此您可以在整个演示文稿中看到导航栏,然后在搜索栏出现后向上移动到导航栏。希望始终处于活动状态,但在viewDidLoad 中设置isActive = true 不会做任何事情。我也尝试过searchController.searchBar.becomeFirstResponder(),但这在viewDidAppear 中也不起作用——必须通过DispatchQueue.main.asyc 延迟。
有人指出here 他们认为这是因为搜索界面尚未完全初始化或其他原因。我们如何才能像上面提到的设置屏幕那样创建一个始终处于活动状态的搜索控制器?
override func viewDidLoad() {
super.viewDidLoad()
searchController.delegate = self
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.delegate = self
navigationItem.searchController = searchController
definesPresentationContext = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//FIXME: Works, but delay is undesirable - search controller should be active initially
searchController.isActive = true
//OR
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}
【问题讨论】: