首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI -单击cancel时执行操作- .searchable函数

SwiftUI -单击cancel时执行操作- .searchable函数
EN

Stack Overflow用户
提问于 2021-09-28 02:36:18
回答 3查看 1.5K关注 0票数 3

使用.searchable(text: $text)函数时,搜索时将在搜索栏中显示一个取消按钮。

单击“取消”按钮时是否有执行操作的方法?当单击cancel时,我想调用一个函数,但是当单击cancel时,我想不出如何执行一个操作。

苹果文档没有提到这方面的任何事情。回到UIKit,func searchBarCancelButtonClicked(searchBar: UISearchBar) {就能做到这一点。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-28 04:01:08

您可以使用isSearching环境值(6)查看是否正在执行搜索。若要在取消时执行操作,可以使用true监视从falseonChange的更改。

代码语言:javascript
复制
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修饰符的子视图中才能正常工作。

票数 7
EN

Stack Overflow用户

发布于 2022-03-16 22:30:54

基于@jnpdx的答案,类似的东西,但更通用的是:

代码语言:javascript
复制
struct SearchView<Content: View>: View {
    @Environment(\.isSearching) var isSearching
    let content: (Bool) -> Content

    var body: some View {
        content(isSearching)
    }

    init(@ViewBuilder content: @escaping (Bool) -> Content) {
        self.content = content
    }
}

然后,用它就像:

代码语言:javascript
复制
struct ContentView: View {
    @State private var searchText = ""
    @Environment(\.dismissSearch) var dismissSearch
    
    var body: some View {
        NavigationView {
            VStack {
                SearchView { isSearching in
                    Text("Child")
                        .onChange(of: isSearching) { newValue in
                            if !newValue {
                                print("Searching cancelled")
                            }
                        }
                }
                Text("Searching for \(searchText)")
                
            }
            
            .searchable(text: $searchText)
            .navigationTitle("Searchable Example")
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-03-29 14:10:15

使用isEmptyonAppear

代码语言:javascript
复制
struct SearchView: View {
    @State var text: String = ""
    
    var body: some View {
        NavigationView {
            VStack {
                if text.isEmpty {
                    main.onAppear {
                        print("empty")
                        // code here
                    }
                } else {
                    main
                }
            }.searchable(text: $text)
                .onSubmit(of: .search) {
                    print("submit")
                }
        }
    }
    
    var main: some View {
        Text("search").searchable(text: $text)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69355159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档