如何使用可搜索修饰符检测取消按钮的点击

问题描述 投票:0回答:2

我使用iOS15的SwiftUI可搜索修饰符通过onSubmit修饰符进行搜索以发送HTTP请求,并且我还想在用户点击“取消”按钮时重置初始列表; 如果我找到了 onCancel 修饰符,我将不胜感激。 有人卖过这个吗

ios15 searchable
2个回答
10
投票

.searchable 附带两个环境值,分别是 isSearching 和 DismissSearch。

@Environment(\.isSearching) private var isSearching: Bool
@Environment(\.dismissSearch) private var dismissSearch

如果我们有如下的可搜索代码

.searchable(text: self.$searchText)

然后我们可以检测到搜索被取消,如下面的代码片段。

.onSubmit(of: .search) {
    //Search triggered on tap of search button in keyboard
}
.onChange(of: searchText) { value in
    if searchText.isEmpty && !isSearching {
        //Search cancelled here
    }
}

尝试使用这种方法,同时苹果希望在即将发布的版本中为我们提供一些 .onCancel(.search) 修饰符。


0
投票

除了上面的答案

当查询变量是视图模型属性时,用户单击“取消”按钮不会让您更改最后一个查询文本值。我在下面发现的内容适用于此用例。

.onChange(of: viewModel.searchQuery) { _, newValue in
    if newValue.isEmpty || !isSearching {
        Task {
            await viewModel.fetch()
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.