.searchable 中的 NavigationLink 不起作用

问题描述

我了解它的新功能,但这似乎是不存在的非常基本的功能。在新的 iOS 15 中实现 .searchable 时,NavigationLink 似乎根本不起作用。

理想情况下,可搜索生成一个带有 ForEach 的过滤列表,对于每个项目,导航链接可以根据您的选择将您带到另一个视图。 ForEach 和列表工作正常,看起来很漂亮,它不会带你去任何地方。

观看 WWDC21,他们谈论了很多关于 .searchable内容,但给出的演示/示例很少..

这是一个简单的例子,没有 ForEach 循环,这表明它根本不起作用..我错过了什么吗?

感谢任何见解:

import SwiftUI

struct ContentView: View {
    
    @State private var term = ""
    
    var body: some View {
        NavigationView {
            Text("Hello,world!")
                .padding()
        }
        .searchable(text: $term) {
            NavigationLink(destination: SecondView()) {
                Text("Go to second view")
            }
        }
    }
}

struct SecondView: View {
    var body: some View {
        Text("Goodbye!")
            .padding()
    }
}

解决方法

NavigationLink 必须始终在 NavigationView 内,无论如何。如果你想把它放在外面,比如里面 .searchable,你应该使用 programmatic navigation with isActive

struct ContentView: View {
    
    @State private var term = ""
    @State private var isPresenting = false
    
    var body: some View {
        NavigationView {
            
            /// NavigationView must only contain 1 view
            VStack {
                Text("Hello,world!")
                    .padding()
                
                /// invisible NavigationLink
                NavigationLink(destination: SecondView(),isActive: $isPresenting) { EmptyView()}
            }
        }
        .searchable(text: $term) {
            Button { isPresenting = true } label: {
                Text("Go to second view")
            }
        }
    }
}

struct SecondView: View {
    var body: some View {
        Text("Goodbye!")
            .padding()
    }
}

结果:

Working navigation link that only appears when search bar tapped

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...