如何在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 请发布您的CancelRow
和SubmitButtonView
的完整代码 - 否则我猜不出您具体在纠结什么以上是关于如何在swiftUI的父视图中从另一个视图访问变量?的主要内容,如果未能解决你的问题,请参考以下文章
我如何在swiftui中从我的应用程序中的任何视图访问这个:@Environment(\.managedObjectContext) var context? [关闭]