如何在swiftUI的父视图中从另一个视图访问变量?

Posted

技术标签:

【中文标题】如何在swiftUI的父视图中从另一个视图访问变量?【英文标题】:How to access variable from another view in parent view in swiftUI? 【发布时间】:2021-12-29 12:58:46 【问题描述】:

我有一个视图“CancelRow”

struct CancelRow: View 
    @Binding var isSelected: Bool

    init(isSelected: Binding<Bool>) 
        self._isSelected = passenger.isSelected
    

   @ViewBuilder var body: some View 
    HStack 
       Text(verbatim: "Hello, \(isSelected)")
    

我有另一个视图,我想根据“CancelRow”中的“isSelected”显示按钮是否处于活动状态

// 另一个视图

CancelRow(isSelected: .constant(false))
    Spacer()
    SubmitButtonView(buttonTitle: title, buttonCallBack: 
        goToOtherScreen()
    , isActive: isSelected ) // how to access this variable from  "CancelRow"

但我不确定如何从另一个视图访问变量。如果“CancelRow”中“isSelected”的值发生更改,如何在另一个视图中更新该值?

感谢您的帮助

【问题讨论】:

这在很大程度上取决于两个视图之间的关系,您是从另一个视图中创建一个视图还是它们不相关? 为什么不使用可以从任何代码访问的全局共享变量 CancelRow 是子视图 【参考方案1】:

如果您的视图之间的关系是“父”(或组合),那么您可以使用@Binding 属性包装器。 那么您的SubmitButtonView 将拥有一个属性

@Binding var isActive: Bool 

你会打电话的

SubmitButtonView(buttonTitle: title, buttonCallBack: 
        goToOtherScreen()
    , isActive: $isSelected )

来自CancelRow

【讨论】:

感谢您的回答,但是在 CancelRow 中要写什么?我应该如何访问它? @NewiosDev 它需要反过来,@Binding 应该在 CancelRow 和 @State 在父视图中 我在 CancelRow 中使用 init 方法..所以不知道该怎么做? @NewiOSDev 请发布您的CancelRowSubmitButtonView 的完整代码 - 否则我猜不出您具体在纠结什么

以上是关于如何在swiftUI的父视图中从另一个视图访问变量?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在swiftui中从我的应用程序中的任何视图访问这个:@Environment(\.managedObjectContext) var context? [关闭]

如何在 SwiftUI 中从减去的子视图中关闭视图

如何从另一个视图swiftui中传递字段文本值

如何在 SwiftUI 的父视图中获取子视图的变量值?

如何通过单击按钮在 Swift UI 中从一个视图导航到另一个视图

SwiftUI 从另一个视图中捕获 Picker 值