【问题标题】:【UISearchController / UISearchBar】How to keep showing a bookmark button when text is entered?【UISearchController / UISearchBar】如何在输入文字时一直显示书签按钮?
【发布时间】: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


【解决方案1】:

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

searchController.searchBar.showsBookmarkButton = true

根据搜索栏是否处于活动状态,确保在代码或 updateSearchResults 函数中的任何地方都不会将其设为 false。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多