这是一个示例代码,单击另一个视图按钮来更改原始视图文本。现在一切进展顺利。
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())
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。