SwiftUI - 单击取消时执行操作 - .searchable 函数

nic*_*eps 7 search swiftui ios15

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

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

苹果文档没有提及任何相关内容。回到 UIKit 中,就有了func searchBarCancelButtonClicked(searchBar: UISearchBar) {这样做的方法。

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

jn_*_*pdx 16

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


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")
                }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能需要注意的是,它似乎isSearching必须位于searchable修改器的子视图内才能正常工作