SwiftUI 是否可以调用该函数并从其他页面更改视图?

2024-04-21

这是我的代码。

struct FirstPage: View {
    
    var body: some View {
        VStack{
            
            NavigationView {
                VStack{
                    
                    Text("First Page")
                        .bold()
                    
                    NavigationLink(destination: SecondPage()) {
                                    
                        Image(systemName:"arrowshape.turn.up.right.circle")
                    }
                }
            }
            
            if (isVisible()) {
                Image(systemName:"rhombus.fill")
                    .frame(width: 100, height: 100, alignment: .center)
            }

        }
    }
}

func isVisible() -> Bool {
    let result = Bool.random()
    
    print("result", result)
    return result
}

我想做的是从 SecondPage 调用全局函数 isVisible() 并更改 Image(systemName:"rhombus.fill") 的可见性。可以这样做吗?

SecondPage 如下所示。

struct SecondPage: View {
   
   
   var body: some View {
       VStack{
           NavigationView {
               VStack {
                   Text("Second Page")
                       .bold()
                   Button(action: {
                       
                   }){
                       Text("Click here")
                   }
               }
           }
       }
   }
}

我想在点击 SecondPage 的按钮时调用 isVisible() 并更改图像的可见性。

有谁知道这是怎么做到的吗 ?


您不需要调用该函数(使用全局函数不是一个好主意。)。只需使用@State and @Binding像这样

struct FirstPage: View {
    
    @State private var isVisible: Bool = false
    
    var body: some View {
        VStack{
            
            NavigationView {
                VStack{
                    
                    Text("First Page")
                        .bold()
                    
                    NavigationLink(destination: SecondPage(isVisible: $isVisible)) {
                        
                        Image(systemName:"arrowshape.turn.up.right.circle")
                    }
                }
            }
            
            if isVisible {
                Image(systemName:"rhombus.fill")
                    .frame(width: 100, height: 100, alignment: .center)
            }
            
        }
    }
}

struct SecondPage: View {
    
    @Binding var isVisible: Bool
    
    var body: some View {
        VStack{
            NavigationView {
                VStack {
                    Text("Second Page")
                        .bold()
                    Button(action: {
                        isVisible = Bool.random()
                    }){
                        Text("Click here")
                    }
                }
            }
        }
    }
}

如果您仍然需要使用全局函数,那么您需要创建一个静态共享 Observable 类。

这是一个例子:

静态共享类

class GlobalClass: ObservableObject {
    
    static var shared = GlobalClass()
    
    @Published var isVisibleVar: Bool = false
    
    func isVisible() {
        let result = Bool.random()
        print("result", result)
        isVisibleVar = result
    }
}

Views

struct SecondPage: View {
    var body: some View {
        VStack{
            NavigationView {
                VStack {
                    Text("Second Page")
                        .bold()
                    Button(action: {
                        GlobalClass.shared.isVisible()
                        
                        /**
                         Or you can use
                         GlobalClass.shared.isVisibleVar = Bool.random()
                         */
                        
                    }){
                        Text("Click here")
                    }
                }
            }
        }
    }
}


struct FirstPage: View {
    
    @ObservedObject private var globalClass = GlobalClass.shared
    
    var body: some View {
        VStack{
            NavigationView {
                VStack{
                    Text("First Page")
                        .bold()
                    
                    NavigationLink(destination: SecondPage()) {
                        Image(systemName:"arrowshape.turn.up.right.circle")
                    }
                }
            }
            
            if globalClass.isVisibleVar {
                Image(systemName:"rhombus.fill")
                    .frame(width: 100, height: 100, alignment: .center)
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 是否可以调用该函数并从其他页面更改视图? 的相关文章

随机推荐