首页 > 解决方案 > SwiftUI - 单击取消时执行操作 - .searchable 函数

问题描述

使用该.searchable(text: $text)功能时,搜索时搜索栏中会出现一个取消按钮。

单击取消按钮时有什么方法可以执行操作?我想在点击取消时调用一个函数,但无法弄清楚点击取消时如何执行操作。

Apple 文档没有提到任何关于此的内容。回到 UIKit 就func searchBarCancelButtonClicked(searchBar: UISearchBar) {可以做到这一点。

下面是我所指的取消按钮的图像:在此处输入图像描述

标签: searchswiftuiios15

解决方案


您可以使用isSearching环境值 ( https://developer.apple.com/documentation/swiftui/environmentvalues/issearching?changes=_6 ) 来查看是否正在执行搜索。要在取消时执行操作,您可以观察从trueusingfalse的变化onChange


struct ContentView: View {
    @State private var searchText = ""
    @Environment(\.dismissSearch) var dismissSearch
    
    var body: some View {
        NavigationView {
            VStack {
                ChildView()
                Text("Searching for \(searchText)")
                
            }
            
            .searchable(text: $searchText)
            .navigationTitle("Searchable Example")
        }
    }
}

struct ChildView : View {
    @Environment(\.isSearching) var isSearching
    
    var body: some View {
        Text("Child")
            .onChange(of: isSearching) { newValue in
                if !newValue {
                    print("Searching cancelled")
                }
            }
    }
}

可能需要注意的是,它似乎isSearching必须在searchable修饰符的子视图中才能正常工作


推荐阅读