如何为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
相关产品推荐
相关产品推荐

