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 是否可以调用该函数并从其他页面更改视图? 的相关文章

  • xcode 9.0.1 / swift 4,没有使用 Objective-C 选择器 'onClick:forEvent:' 声明的方法 [重复]

    这个问题在这里已经有答案了 I use swift 4为了构建我的 UI 我创建了一个UIButton并想为其添加一个目标 但编译器会抛出警告 No method declared with Objective C selector onC
  • 检查 Swift 中关联类型是否符合协议

    在类似情况下 如何检查对象是否符合 可表示 协议 protocol Representable associatedtype RepresentType var representType RepresentType get set cla
  • 如何在 Swift 中使用未知密钥解码 JSON 响应?

    我想将数据拆分为https blockchain info ticker https blockchain info ticker这样每一行都是它自己的String在一个数组中 我正在制作一个获取所选货币价格的应用程序 因此 如果有人想要澳
  • 为 Swift 对象/属性设置观察者

    我一直在寻找一种在连接到 Mac 的显示器数量发生变化时触发方法的方法 我知道我可以获得 NSScreen screens count 的值 但我需要找到一种方法来在该值发生变化时创建通知或其他内容 或者指示所连接的显示器数量发生变化的其他
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 将自定义图像设置为 UIBarButtonItem 但它不显示任何图像

    我想将自定义图像设置为 UIBarButtonItem 但它只显示周围的矩形框并且不显示实际图像 func setupBrowserToolbar let browser UIToolbar frame CGRect x 0 y 20 wi
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • 在 SwiftUI 中使用分段式选取器在两个页面之间滑动

    我有一个Picker with pickerStyle SegmentedPickerStyle 使其成为分段控件 我想让页面在之间平滑滑动 而不是使用条件语句替换视图 这是我迄今为止所做的 gif 这是到目前为止的代码 由if 而不是在不
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • 在 Swift 中使用 CommonCrypto 解密时出现问题

    我在一家Swift only加密 解密Extension for String and NSData 并且 crypt 部分的工作基于 Zaph 在链接问题中提供的答案 在 Swift 中使用 CCCrypt CommonCrypt 时出现
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • SKNode 上的 runAction 未完成

    我使用 NSOperation 子类来获取串行执行SKAction正如这个问题中所描述的 如何在 Swift 中子类化 NSOperation 以将 SKAction 对象排队以进行串行执行 https stackoverflow com
  • init 中的 Swift 通用约束

    我有通用的 我希望能够用特定的约束来初始化它 约束仅用于初始化 班里的其他人并不关心 这是一个简化的示例 struct Generic
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • 我可以/如何用 RC3 替换我的 KVO 东西?

    我正在尝试将一个使用 Facebook 的 KVOController 的 objc 应用程序移植到 Swift 我被鼓励去看看RC3 https github com ReactiveCocoa ReactiveCocoa作为一种替代且更

随机推荐