【发布时间】:2021-07-19 10:36:19
【问题描述】:
这是我第一次在 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 的规范。
如果没有,如果您能告诉我一些替代方法,我将不胜感激。
下面是我的代码和屏幕图像供您参考。
| Before entering text | After entering text |
|---|---|
属性:
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...
}
如果您需要一些其他信息,请告诉我。
提前谢谢你。
【问题讨论】:
-
嗨,欢迎来到 SO!您的问题非常适合第一个问题。只是一些格式化提示:而不是
<br />,只需点击返回 2 次。也不要在代码前面使用>,将其包裹在your code here中 -
感谢您告诉我!我也编辑了几分钟前发布的另一个问题。如果你能就我的问题给我一些建议,我很高兴。
-
这个问题的解决方案有运气吗?
-
找到了解决方案:searchController.searchBar.showsBookmarkButton = true 根据搜索栏是否处于活动状态,请确保在代码或 updateSearchResults 函数中的任何地方都没有将其设为 false。
标签: ios swift uisearchbar uisearchcontroller