.searchable 中的 NavigationLink 不起作用
NavigationLink inside .searchable does not work
我了解它的新功能,但这似乎是这里没有的非常基本的功能。在新的 iOS 15 中实现 .searchable
时,导航 Link 似乎根本不起作用。
理想情况下,searchable 会生成一个带有 ForEach 的过滤列表,对于每个项目,Nav Link 可以根据您的选择将您带到另一个视图。 ForEach 和 list 工作并且看起来很漂亮,它不会带你去任何地方。
观看 WWDC21,他们谈论了很多关于 .searchable
,但很少给出 demonstration/example..
这是一个简单的例子,没有 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()
}
}
结果:
我了解它的新功能,但这似乎是这里没有的非常基本的功能。在新的 iOS 15 中实现 .searchable
时,导航 Link 似乎根本不起作用。
理想情况下,searchable 会生成一个带有 ForEach 的过滤列表,对于每个项目,Nav Link 可以根据您的选择将您带到另一个视图。 ForEach 和 list 工作并且看起来很漂亮,它不会带你去任何地方。
观看 WWDC21,他们谈论了很多关于 .searchable
,但很少给出 demonstration/example..
这是一个简单的例子,没有 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()
}
}
结果: