SwiftUI 在视图之间切换
Posted
技术标签:
【中文标题】SwiftUI 在视图之间切换【英文标题】:SwiftUI Switching between views 【发布时间】:2020-05-28 19:13:01 【问题描述】:我有一个包含整数数组的父视图(内容视图),
父视图切换器函数根据数组中整数的值切换子视图。
我遇到的问题是“view1”被重新呈现(在之前被呈现之后)视图没有被重绘并且文本字段中的文本仍然被填充。
如何在每次调用 switch 函数时重绘子视图?
谢谢
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")
【问题讨论】:
【参考方案1】:这是可能的解决方案。使用 .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())
【讨论】:
以上是关于SwiftUI 在视图之间切换的主要内容,如果未能解决你的问题,请参考以下文章