【问题标题】:SwiftUI Switching between viewsSwiftUI 在视图之间切换
【发布时间】: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")
            }
        }
    }
}

【问题讨论】:

    标签: swiftui


    【解决方案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())
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2020-03-27
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多