NavigationStack 可搜索 .focused

Ale*_*abý 2 searchable swiftui swiftui-navigationstack

当用户单击搜索框以满足条件(显示另一个视图)时,我需要进行配置。一旦他单击“取消”以显示原始视图(已经可以通过 .onChange(of: searchText) { value in if (!value.isEmpty) {...) 进行测试

NavigationStack {
            ...
if showView == true {}
            ...
            
        }
        
        .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: LocalizedStringKey("Look for something"))
        .focused($focusState)
        .onChange(of: focusState, perform: { 
        showView = true
            })
Run Code Online (Sandbox Code Playgroud)

当用户开始搜索时,我需要显示不同的视图并隐藏原始视图,因为我在新视图上有搜索设置。一旦他点击“搜索”按钮,搜索就会开始。

Ash*_*lls 6

@FocusState不是处理此问题的方法,因为搜索栏会更新或响应此状态下的更改。

您需要使用的是应用修饰符的isSearching Environment视图中的变量.searchable,例如:

struct ContentView: View {

    @State private var searchText = ""

    var body: some View {
        NavigationView {
            SearchingView(searchText: $searchText)
                .searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), prompt: LocalizedStringKey("Look for something"))
        }
    }
}


struct SearchingView: View {
    @Environment(\.isSearching) private var isSearching
    @Binding var searchText: String

    var body: some View {
        if isSearching {
            // Show your filtered data view
        } else {
            // Show non-searching view
        }
    }
}
Run Code Online (Sandbox Code Playgroud)