首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在UISearchBar中设置文本而不激活UISearchDisplayController

您可以通过以下步骤在 UISearchBar 中设置文本而不激活 UISearchDisplayController:

  1. 创建一个自定义的 UISearchBar 类并覆盖其 textDidChange 方法。
  2. textDidChange 方法中,将文本添加到输入框中但不激活搜索显示控制器。
  3. textDidChange 方法中,调用 setShowsSearchButton(true, animated: false) 方法来显示搜索按钮,但不要激活搜索显示控制器。
  4. 在自定义的 UISearchBar 类中,实现 canCancelContentTouches 方法,以允许搜索按钮被点击并关闭搜索显示控制器。

以下是一个示例代码:

代码语言:swift
复制
class CustomSearchBar: UISearchBar {

    override func textDidChange(_ searchText: String) {
        super.textDidChange(searchText)
        if searchText.count > 0 {
            setShowsSearchButton(true, animated: false)
        } else {
            setShowsSearchButton(false, animated: false)
        }
    }

    override func canCancelContentTouches(_ invalidating: Bool) -> Bool {
        return true
    }
}

在上面的代码中,我们覆盖了 textDidChange 方法,以便在文本更改时处理不激活 UISearchDisplayController 的逻辑。在 textDidChange 方法中,我们首先调用 setShowsSearchButton(true, animated: false) 方法来显示搜索按钮,但不要激活搜索显示控制器。然后,在自定义的 UISearchBar 类中,我们实现了 canCancelContentTouches 方法,以允许搜索按钮被点击并关闭搜索显示控制器。

注意,您需要将您的自定义 UISearchBar 类应用到您的 UISearchBar 实例。例如,在您的视图控制器中,您需要将自定义的 UISearchBar 实例设置为 searchBar 属性:

代码语言:swift
复制
override func viewDidLoad() {
    super.viewDidLoad()
    searchBar.setShowsSearchButton(true, animated: false)
    searchBar.customSearchBar = CustomSearchBar()
}

现在,当您在 UISearchBar 中输入文本时,搜索按钮将显示,但不会激活搜索显示控制器。当您点击搜索按钮时,搜索显示控制器将显示,并允许您执行搜索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

自定义UISearchController的外观

以前我们在项目中使用搜索框的时候,如果用系统自带的控件则是使用UISearchDisplayController,而自从iOS8之后,系统重新给我们提供了一个搜索控件:UISearchController。在UISearchController中我们无需再自己初始化UISearchBar,只需要提供searchResult展示的视图。然而在开发中,我们往往需要根据项目的风格来改变UISearchBar的外观,通过继承的方式,我们可以完全定制符合项目风格的外观,然而有些情况下我们很难短时间内完成全部的外观定制工作,譬如我们项目用的好几个旧框架,代码中充斥着各种写好的UISearchBar的展示,而改动底层框架并不是一个较好地实践。于是我开始搜索并总结出了几个不通过继承的方式来更改UISearchBar外观的方法。

02
  • 领券