开发者社区> 问答> 正文

工作表内容中的行为不能影响父视图

这是一个示例代码,单击另一个视图按钮来更改原始视图文本。现在一切进展顺利。

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 !")
        }
    }
}

但是,如果我将编辑视图移到单张,内容视图的文本不能更改!事实上,数据已经更改,但是ContentView不重新渲染.

这是bug?或者任何解决方法,强制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())

展开
收起
游客5akardh5cojhg 2019-12-04 16:21:35 372 0
0 条回答
写回答
取消 提交回答
问答地址:
问答排行榜
最热
最新

相关电子书

更多
动态、高效,蚂蚁动态卡片的内核逻辑 立即下载
用计算和数据去改变整个世界 立即下载
继承与功能组合 立即下载