我的导航堆栈无法正常工作。
从我的主视图中,我想切换到一个列表视图,在此示例中,该列表视图表示字符串数组。 然后,我想导航到一个详细视图,在这里我希望能够更改所选字符串的值。
我在以下代码中遇到2个问题:
另外,我想必须有一种更方便的方法在详细视图中进行绑定...
这是代码:
import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
TestMainView()
}
}
}
struct TestMainView: View {
var body: some View {
NavigationView {
List {
NavigationLink("List View", destination: TestListView())
}
.navigationTitle("Test App")
}
}
}
struct TestListView: View {
@State var strings = [
"Foo",
"Bar",
"Buzz"
]
@State var selectedString: String? = nil
var body: some View {
List(strings.indices) { index in
NavigationLink(
destination: TestDetailView(selectedString: $selectedString),
tag: strings[index],
selection: $selectedString) {
Text(strings[index])
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("List")
}
}
}
struct TestDetailView: View {
@Binding var selectedString: String?
var body: some View {
VStack {
if let _ = selectedString {
TextField("Placeholder",
text: Binding<String>( //what's a better solution here?
get: { selectedString! },
set: { selectedString = $0 }
)
)
.padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
}
Spacer()
}
.navigationTitle("Detail")
}
}
struct TestMainView_Previews: PreviewProvider {
static var previews: some View {
TestMainView()
}
}
我显然做错了,但是我不知道该怎么做...
答案 0 :(得分:1)
您正在['oatmeal', 'banana']
内部更改NavigationLink的selection
,这将迫使NavigationLink
重新加载。
您可以尝试以下方法:
TestListView