【UISearchController / UISearchBar】如何在输入文字时一直显示书签按钮?

问题描述

这是我第一次在 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 的规范。
如果没有,如果您能告诉我一些替代方法,我将不胜感激。

供您参考,我的代码和屏幕图像如下。

在输入文本之前 输入文字

image before entering text

image 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...
}

如果您有其他需要的信息,请告诉我。
提前致谢。

解决方法

找到书签未看到问题的解决方案:

searchController.searchBar.showsBookmarkButton = true

根据搜索栏是否处于活动状态,确保在代码或 updateSearchResults 函数中的任何位置都没有设置为 false。

请参阅 this article 以根据需要进行正确设置。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...