【问题标题】:SwiftUI - Perform action when cancel is clicked - .searchable functionSwiftUI - 单击取消时执行操作 - .searchable 函数
【发布时间】:2021-11-20 02:35:19
【问题描述】:

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

点击取消按钮时有什么方法可以执行操作吗?我想在点击取消时调用一个函数,但不知道点击取消时如何执行操作。

Apple Documentation 没有提及此事。回到 UIKit 有 func searchBarCancelButtonClicked(searchBar: UISearchBar) { 来做这件事。

下面是我指的取消按钮的图片:

【问题讨论】:

    标签: search swiftui ios15


    【解决方案1】:

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

    
    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 修饰符的子视图中才能正常工作

    【讨论】:

    • 感谢您指向我的文档。如果用户也点击了“搜索”按钮,它不会变成 false 吗?
    • 不在我的测试中,没有。你有什么不一样的经历吗?
    • 只是想在实施之前挑选你的大脑。经过测试并按预期工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多