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

如何检测SwiftUI中.searchable搜索框键盘搜索按钮的点击事件

基于.searchable修饰符的原生监听方案

存在完全原生的SwiftUI实现,无需借助UIKit桥接,适配iOS 15及以上版本(和.searchable修饰符的最低支持版本一致),核心依靠onSubmit(of: .search)修饰符实现。

实现逻辑

.searchable修饰符绑定的搜索输入框,默认会将提交事件的类型标记为.search,你只需要在同层级添加onSubmit(of: .search)修饰符,闭包内的代码就会在用户点击键盘上的搜索按键时触发。

完整示例代码

import SwiftUI

struct SearchDemoView: View {
    // 绑定搜索框输入文本
    @State private var searchText = ""
    // 存储搜索结果
    @State private var resultList: [String] = []
    
    var body: some View {
        NavigationStack {
            List(resultList, id: \.self) { item in
                Text(item)
            }
            .navigationTitle("搜索演示")
            // 配置搜索框
            .searchable(text: $searchText, prompt: "输入关键词搜索")
            // 监听搜索按键点击事件
            .onSubmit(of: .search) {
                // 此处执行搜索逻辑,比如发起网络请求、过滤本地数据
                print("用户触发搜索,关键词:\(searchText)")
                resultList = ["搜索结果1:\(searchText)", "搜索结果2:\(searchText)"]
            }
            // 可选:如果需要实时监听搜索文本输入变化,可搭配onChange使用
            .onChange(of: searchText) { newText in
                print("搜索框当前输入:\(newText)")
            }
        }
    }
}

注意事项

  • 不要省略of: .search参数,否则onSubmit会响应当前视图内所有输入框的提交事件,触发逻辑会不符合预期
  • 如果需要支持iOS 15以下的系统版本,才需要考虑使用UIViewRepresentable桥接UISearchController的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:15:07