【问题标题】:change a value inside a swiftUI view based in a change made in his child根据在他的孩子中所做的更改更改 swiftUI 视图中的值
【发布时间】:2020-08-07 16:26:52
【问题描述】:

我有这个代码:

主视图

import SwiftUI

struct ContentView: View {
    
   @EnvironmentObject var data:Pessoa
var body: some View {
    NavigationView{
        
        VStack{
            
            NavigationLink(destination:view2(data: data)){
                Text(data.data.firstObject as! String)
            }
        }
    }.environmentObject(data)
}
}

第二次查看

import SwiftUI

struct view2: View {
    
  var data:Pessoa
    
var body: some View {
    
    Button(action: {
        
        self.data.data[0] = "New btn Text"
    }){
        Text("Edit Btn Texr")
        
    }.environmentObject(data)
    
}
}

类佩索阿

class Pessoa:ObservableObject {
    var data:NSMutableArray
     init() {
        self.data = NSMutableArray()
        self.data.add("Btn")
    }
}

当我从第二个视图返回时如何更新主视图。

是的,我需要传递对象或至少传递数组。

主要思想是这样的结构:

V1 -> v2 -> V3

如果我在 V3 中对类的某些参数进行更改,我如何(在布局中)将此更改传播到 v2 和 v1

【问题讨论】:

    标签: swift swiftui swiftui-environment


    【解决方案1】:

    为了让您启动并运行,您可以使用@Published 属性包装器,对于您的示例,您实际上不需要@EnvironmentObject。你可以改用@ObservedObject...

    class Pessoa: ObservableObject {
        @Published var data: Array<String>
        
        init() {
            self.data = Array()
            self.data.append("Btn")
        }
    }
    
    struct view2: View {
        
        var data: Pessoa
        
        var body: some View {
            
            Button(action: {
                
                self.data.data[0] = "New btn Text"
            }){
                Text("Edit Btn Texr")
                
            }
            
        }
    }
    
    struct ContentView: View {
        
        @ObservedObject var data = Pessoa()
        
        var body: some View {
            NavigationView{
                
                VStack{
                    
                    NavigationLink(destination:view2(data: data)){
                        Text(data.data.first ?? "N/A")
                    }
                }
            }
        }
    }
    

    但是你应该检查一下 Joakim 的链接...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多