Swiftui 视图之间的快速切换
我有一个包含整数数组的父视图(内容视图) 父视图中的视图切换器函数根据数组中整数的值切换子视图 我遇到的问题是“view1”被重新呈现(在之前呈现之后),视图没有被重新绘制,文本字段中的文本仍然填充 如何在每次调用switch函数时重新绘制子视图 谢谢Swiftui 视图之间的快速切换,swiftui,Swiftui,我有一个包含整数数组的父视图(内容视图) 父视图中的视图切换器函数根据数组中整数的值切换子视图 我遇到的问题是“view1”被重新呈现(在之前呈现之后),视图没有被重新绘制,文本字段中的文本仍然填充 如何在每次调用switch函数时重新绘制子视图 谢谢 struct ContentView: View { var views = [2,1,1] @State var currentView = 0 var body: some View { VSt
struct ContentView: View {
var views = [2,1,1]
@State var currentView = 0
var body: some View {
VStack{
viewSwitcher()
}
}
func viewSwitcher() -> AnyView {
switch views[currentView] {
case 1:
return AnyView(view1(currentView: self.$currentView))
case 2:
return AnyView(view2(currentView: self.$currentView))
default:
return AnyView(EmptyView())
}
}
}
struct view1:View {
@State var textInput: String = ""
@Binding var currentView: Int
var body: some View {
VStack{
Text("View 1")
TextField("Enter Text", text: self.$textInput)
Button(action: {
self.currentView += 1
}){
Text("Submit")
}
}
}
}
struct view2:View {
@Binding var currentView: Int
var body: some View {
VStack{
Text("View 2")
Button(action: {
self.currentView += 1
}){
Text("Submit")
}
}
}
}
这是可能的解决办法。使用.id修饰符会使视图在每次更新时都是唯一的,因此会进行重建 使用Xcode 11.4/iOS 13.4进行测试
func viewSwitcher() -> AnyView {
switch views[currentView] {
case 1:
return AnyView(view1(currentView: self.$currentView).id(UUID()))
case 2:
return AnyView(view2(currentView: self.$currentView).id(UUID()))
default:
return AnyView(EmptyView())
}
}