You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI使用.searchable搜索栏时,触发.onSubmit后如何收起搜索栏?

解决方案

方案1:使用系统内置的dismissSearch环境动作(优先推荐)

这是SwiftUI官方针对搜索栏退出提供的原生能力,适配iOS 15+(和.searchable的最低支持版本一致),实现步骤如下:

  1. 在使用搜索栏的视图中声明环境变量:
@Environment(\.dismissSearch) private var dismissSearch
  1. 在.onSubmit(of: .search)的回调中直接调用该方法即可同时退出搜索激活状态、收起搜索栏:
.onSubmit(of: .search) {
    // 你原本的搜索业务逻辑
    executeSearch()
    // 执行退出搜索状态
    dismissSearch()
}

方案2:通过isPresented绑定手动控制搜索栏显隐

如果需要自定义搜索栏的激活状态控制逻辑,可以使用带isPresented参数的.searchable重载方法:

  1. 声明状态变量控制搜索激活状态:
@State private var searchText = ""
@State private var isSearchActive = false
  1. 给.searchable修饰符绑定该状态:
.searchable(text: $searchText, isPresented: $isSearchActive, prompt: "搜索内容")
  1. 在.onSubmit回调中将isSearchActive置为false即可退出搜索激活状态:
.onSubmit(of: .search) {
    executeSearch()
    isSearchActive = false
}

注意事项

  • 两种方案均不需要额外搭配UIKit的resignFirstResponder相关逻辑,系统会自动处理键盘收起和搜索栏状态切换
  • 如果同时使用了@FocusState绑定搜索框焦点,注意不要和上述两种方案的状态冲突,避免出现状态不同步的问题

内容的提问来源于stack exchange,提问作者nickreps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:24:01