问题描述
这是我第一次在 Stack Overflow 上发布问题。
我目前在 Swift 中遇到 UISearchController
。
我想在 textField 中输入文本时继续显示书签按钮。
我需要通过书签按钮(或任何其他方式,如果存在的话)获取文本,而不是通过执行搜索时调用的“searchBarSearchButtonClicked”方法。
但是,一旦输入文本,按钮就会隐藏,因为它上面会显示一个清除按钮。
我将以下选项设置为“.never”,遗憾的是没有显示书签按钮,尽管清除按钮消失了。
searchController.searchBar.searchTextField.clearButtonMode = .never
问题:Is there any way to resolve the issue and make it work?
我想这是 UISearchController 的规范。
如果没有,如果您能告诉我一些替代方法,我将不胜感激。
供您参考,我的代码和屏幕图像如下。
在输入文本之前 | 输入文字后 |
---|---|
属性:
let searchController = UISearchController(searchResultsController: nil)
setupSearchController:
我在下面的方法中设置了书签按钮和清除按钮。
private func setupSearchController() {
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = true
definesPresentationContext = true
searchController.delegate = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchResultsUpdater = self
searchController.searchBar.delegate = self
searchController.searchBar.placeholder = "Search channels"
// bookmark and clear button settings
searchController.searchBar.searchTextField.clearButtonMode = .never
searchController.searchBar.showsBookmarkButton = true
searchController.searchBar.setimage(UIImage(systemName: "globe"),for: .bookmark,state: .normal)
}
searchBarSearchButtonClicked: 搜索过程在下面的方法中执行。
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
print("searchBarSearchButtonClicked")
print("keyword",searchBar.text ?? "Empty keyword")
guard let keyword = searchBar.text else {
print("Keyword is empty")
return
}
// Search process is here...
}
searchBarBookmarkButtonClicked: 我想使用以下方法中输入的文本执行另一个进程(不是搜索进程)。
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) {
print("Bookmark button is clicked...")
guard let searchQuery = searchBar.text,!searchQuery.isEmpty else {
print("Keyword is empty")
return
}
// Another process is here...
}
如果您有其他需要的信息,请告诉我。
提前致谢。
解决方法
找到书签未看到问题的解决方案:
searchController.searchBar.showsBookmarkButton = true
根据搜索栏是否处于活动状态,确保在代码或 updateSearchResults 函数中的任何位置都没有设置为 false。
请参阅 this article 以根据需要进行正确设置。