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

如何为SwiftUI可复用SearchBar的取消按钮追加自定义功能?

实现方案

给SearchBar结构体添加一个可选的回调闭包属性,默认执行空操作,即可在不影响原有调用逻辑的前提下,支持动态传入取消按钮的额外操作。

1. 修改后的SearchBar代码

struct SearchBar: View {
    
    @Binding var searchText: String
    @Binding var isSearching: Bool
    // 新增取消按钮额外回调,默认空实现
    var cancelAction: () -> Void = {}
    
    var body: some View {
        HStack {
            HStack {
                TextField("Search terms here", text: $searchText)
            }
            .onTapGesture(perform: {
                isSearching = true
            })
            .overlay(
                HStack {
                    Image(systemName: "magnifyingglass")
                    
                    if isSearching {
                        Button(action: { searchText = "" }, label: {
                            Image(systemName: "xmark.circle.fill")     
                        })
                    }   
                }
            )
            if isSearching {
                Button(action: {
                    // 原有逻辑保留
                    isSearching = false
                    searchText = ""
                    // 执行传入的额外操作
                    cancelAction()
                }, label: {
                    Text("Cancel")
                })
            }
            
        }
    }
}

2. 调用方式

  • 无额外操作的场景,原有调用方式完全兼容,无需修改:
SearchBar(searchText: $textFieldSearch, isSearching: $isSearching)
  • 需要追加额外操作的场景,直接传入自定义闭包即可:
SearchBar(searchText: $textFieldSearch, isSearching: $isSearching) {
    // 此处填写自定义额外逻辑,比如收起键盘、刷新列表等
    UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:24:06