Swiftui 文本字段更改后NavigationLink将解除
我有一个导航堆栈,它不能按预期工作 在我的主视图中,我想切换到一个列表视图,在本例中,该视图表示一个字符串数组。 然后,我希望导航到详细视图,在该视图中,我希望能够更改选定字符串的值 我对以下代码有2个问题:Swiftui 文本字段更改后NavigationLink将解除,swiftui,Swiftui,我有一个导航堆栈,它不能按预期工作 在我的主视图中,我想切换到一个列表视图,在本例中,该视图表示一个字符串数组。 然后,我希望导航到详细视图,在该视图中,我希望能够更改选定字符串的值 我对以下代码有2个问题: 在TextField中的第一次按键时,细节视图将被取消 值本身没有被更改 另外,我认为必须有一种更方便的方式在细节视图中进行绑定 代码如下: 导入快捷界面 @主要 struct TestApp:App{ var body:一些场景{ 窗口组{ TestMainView() } } } 结构
导入快捷界面
@主要
struct TestApp:App{
var body:一些场景{
窗口组{
TestMainView()
}
}
}
结构TestMainView:视图{
var body:一些观点{
导航视图{
名单{
NavigationLink(“列表视图”,目标:TestListView())
}
.navigationTitle(“测试应用程序”)
}
}
}
结构TestListView:视图{
@状态变量字符串=[
“福”,
“酒吧”,
“嗡嗡声”
]
@状态变量selectedString:字符串?=nil
var body:一些观点{
列表(strings.index){中的索引
导航链接(
目的地:TestDetailView(selectedString:$selectedString),
标记:字符串[索引],
选择:$selectedString){
文本(字符串[索引])
}
.navigationBarTitleDisplayMode(.inline)
.navigationTitle(“列表”)
}
}
}
结构TestDetailView:视图{
@绑定变量selectedString:String?
var body:一些观点{
VStack{
如果let=selectedString{
文本字段(“占位符”,
text:Binding(//这里有什么更好的解决方案?
获取:{selectedString!},
集合:{selectedString=$0}
)
)
.padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
}
垫片()
}
.navigationTitle(“详细信息”)
}
}
结构TestMainView\u预览:PreviewProvider{
静态var预览:一些视图{
TestMainView()
}
}
我显然做错了,但我不知道该怎么做……您正在从
NavigationLink
内部更改NavigationLink的选择,从而强制TestListView
重新加载
您可以尝试以下方法:
struct TestListView: View {
@State var strings = [
"Foo",
"Bar",
"Buzz",
]
var body: some View {
List(strings.indices) { index in
NavigationLink(destination: TestDetailView(selectedString: self.$strings[index])) {
Text(self.strings[index])
}
}
}
}
struct TestDetailView: View {
@Binding var selectedString: String // remove optional
var body: some View {
VStack {
TextField("Placeholder", text: $selectedString)
.padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
Spacer()
}
}
}
这很好地解释了实际发生的事情以及为什么我的观点会被否定——谢谢。我想这应该是一个简单的任务——拥有一个能够编辑和添加到我的模型中的导航;你有学习材料的链接吗?(我知道这与我原来的问题没有什么关系——只是不想在这里把这个具体问题过度复杂化…@ASSeeger不幸的是,我不知道有任何专门针对NavigationLink+TextField组合的教程。但是,如果您的代码有任何其他问题,您可以随时发布另一个问题-我会尽力帮助您。