【问题标题】:SwiftUI some view to its root viewSwiftUI 对其根视图的一些视图
【发布时间】:2020-02-21 00:02:37
【问题描述】:

我想通过更改@State 变量的状态来触发 SwiftUI 中子视图的更新,因为当我更改钱包对象时它不会单独更新,因为它被定义为 EnvironmentObject。问题是我必须用 environmentObject 初始化视图,它返回一些视图,并且不能将它转换为 WalletView,因为它应该看起来应该。

var walletView =  WalletView().environmentObject(Wallet(cards: reminders))

if walletView = walletView as? WalletView{
    walletView.isPresented = !walletView.isPresented
}

如何访问 WalletView 对象?

我试过了:

var walletView =  WalletView()
let someWalletView = walletView.environmentObject(Wallet(cards: reminders))

walletView.isPresented = !walletView.isPresented

但 walletView 似乎没有更新。有什么线索吗?

【问题讨论】:

  • 能不能加个ContentView的代码清楚一点,你想实现什么?
  • “我想触发子视图的更新......因为当我更改钱包对象时它不会单独更新,因为它被定义为 EnvironmentObject。” ???它可以做到......你最好解决它,根据定义,从某些视图进行投射是不可能的。
  • 谢谢,我通过将变量更改为@Binding 解决了这个问题。

标签: ios swift iphone swiftui


【解决方案1】:

SwiftUI 的方法是改变视图状态 inside 视图,所以据我了解你打算用WalletView 做什么,它可以通过以下方式实现(scratchy):

struct WalletView: View {
   ...
   var body: some View {
      _some_internal_view
         .onAppear { self.isPresented = true }
         .onDisappear { self.isPresented = false }
   }
}

【讨论】:

    【解决方案2】:

    我通过将变量 isPresented 更改为 @Binding 解决了这个问题,然后修改它会触发子类的更新。

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 2020-03-30
      • 2020-06-21
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 2021-12-29
      相关资源
      最近更新 更多