我目前正在Swift中使用UISearchController
。
我想在文本输入到textField时继续显示书签按钮。
我需要通过一个书签按钮(或任何其他可能存在的方式),而不是通过“searchBarSearchButtonClicked”方法时,搜索被调用的文本。
但是,一旦输入文本,该按钮就会隐藏,因为在其上方会显示一个清除按钮。
我将下面的选项设置为“.never”,不幸的是,它没有显示书签按钮,尽管一个清除按钮消失了。
searchController.searchBar.searchTextField.clearButtonMode = .never
问题:
有没有办法解决这个问题,让它发挥作用?
我想这是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...
}
如果你需要更多的信息,请告诉我。
1条答案
按热度按时间yeotifhr1#
找到了书签未显示问题的解决方案:
根据搜索栏是否处于活动状态,确保在代码中或updateSearchResults函数中的任何地方都不会将此设置为false。