【问题标题】:Environment dismissSearch not working for macOS SwiftUI环境驳回搜索不适用于 macOS SwiftUI
【发布时间】:2021-08-05 15:57:48
【问题描述】:

如何让@Environment 在 macOS 中工作?下面是一个 sn-p 代码,它应该只是一个基本的 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)
            }
        }
    }
}

【问题讨论】:

  • 嗨,事实上,这是一个完全可行的例子。您只需将复制粘贴到一个新的 SwiftUI 项目或 Playground 中,它就会运行。 dismissSearch 是 SwiftUI 已经提供的 Environment 函数。
  • 啊——明白了!对新的 Swift UI 3.0 内容还不够熟悉。

标签: swift macos swiftui


【解决方案1】:

isSearchingdismissSearch 环境值只能在应用了searchable 修饰符的视图访问。

很遗憾,onSubmit(of: .search) 似乎在修改后的视图中不起作用。

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

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")
            }
        }
    }
}

【讨论】:

  • 知道了!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2013-11-13
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
相关资源
最近更新 更多