首页 > 解决方案 > 环境驳回搜索不适用于 macOS SwiftUI

问题描述

如何@Environment在 macOS 中工作?这是下面的代码片段,它应该只是一个基本的 NavigationView,顶部尾随位置有一个搜索栏,理论上应该触发文本在搜索/不搜索之间切换,当你按下返回时,它应该散焦搜索字段并打印来安慰文本。

目前,它的布局正确,但isSearching没有更新,dismissSearch()也不起作用。有什么建议么?

struct ContentView: View {
    @State var searchText = ""

    @Environment(\.isSearching) var isSearching
    @Environment(\.dismissSearch) var dismissSearch

    var body: some View {
        NavigationView {
            List {
                Text("Search Bar")
            }
            VStack(alignment: .center) {
                Text(isSearching ? "Searching" : "Not Searching")
            }
            .searchable(text: $searchText, placement: .toolbar)
            .onSubmit(of: .search) {
                dismissSearch()
                print(searchText)
            }
        }
    }
}

标签: swiftmacosswiftui

解决方案


isSearching&dismissSearch环境值只能在应用了修饰符视图中访问。searchable

不幸的是,它似乎onSubmit(of: .search)在修改后的视图中不起作用。

isSearching 您的代码根据 Apple 的文档重新排列:

struct ContentView: View {
    @State var searchText = ""

    var body: some View {
        NavigationView {
            SearchableListView()
                .searchable(text: $searchText, placement: .toolbar)
                .onSubmit(of: .search, someActionFunction) // appears to only work here
        }
    }

    struct SearchableListView: View {
        @Environment(\.isSearching) var isSearching
        @Environment(\.dismissSearch) var dismissSearch

        var body: some View {
            List {
                Text("Search Bar")
            }
            VStack(alignment: .center) {
                Text(isSearching ? "Searching" : "Not Searching")
            }
        }
    }
}

推荐阅读