gpt4 book ai didi

ios - 工作表内容中的行为不能影响父 View

转载 作者:行者123 更新时间:2023-11-29 05:16:08 25 4
gpt4 key购买 nike

这是一个示例代码,单击另一个 View 按钮可以更改原始 View 文本。现在,一切都很顺利。

    import SwiftUI

struct ContentView: View {
@EnvironmentObject var test:Test
var body: some View {
NavigationView{
VStack{
Text(test.a)
NavigationLink("change now",destination: editView())
}
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(Test())
}
}

class Test:ObservableObject{
@Published var a:String = "Old"
}

struct editView:View{
@EnvironmentObject var test:Test
var body:some View{
Button(action:{
self.test.a = "New"
}){
Text("Change !")
}
}
}

但是,如果我将 editView 移动到 .sheet ,ContentView 的 Text 就无法更改!事实上数据已经改变,但是ContentView没有重新渲染

这是一个错误吗?或者任何解决它的方法,强制 contentView 重新渲染。


import SwiftUI

struct ContentView: View {
@EnvironmentObject var test:Test
@State var show:Bool = false
var body: some View {
NavigationView{
VStack{
Text(test.a)
Button(action:{self.show.toggle()}){
Text("show sheet")
}
}
}.sheet(isPresented: $show){
editView().environmentObject(Test())
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(Test())
}
}

class Test:ObservableObject{
@Published var a:String = "Old"
}

struct editView:View{
@EnvironmentObject var test:Test
var body:some View{
Button(action:{
self.test.a = "New"
}){
Text("Change !")
}
}
}

我已经做到了。

let contentView = ContentView().environmentObject(Test())

最佳答案

您的问题在于传递EnvironmentObject。您创建了一个新的测试模型,而不是通过现有模型。

@EnvironmentObject var test:Test
@State var show:Bool = false

var body: some View {
NavigationView{
VStack{
Text(test.a)
Button(action:{self.show.toggle()}){
Text("show sheet")
}
}
}.sheet(isPresented: $show){
editView().environmentObject(self.test)
}
}

注意最后一行:

editView().environmentObject(self.test)

现在一切正常了,祝你好运!

关于ios - 工作表内容中的行为不能影响父 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59171160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com