首页 > 解决方案 > 从 UIKit 更新 @State var

问题描述

我有一个在列表视图中显示两个项目的 SwiftUI。我希望能够从 UIKit 推送所需的列表条目。为此,我创建了一个 @State var,我想从 UIKit 设置它以通过 NavigationLink 的选择参数上的绑定来触发所需的列表条目。

public struct DateOptions: View, MiscellaneousHelper {
  @State var selectedItem: AppMainFeatureData? = nil

      
      let tabBarController: TabBarController
    
      public var body: some View {
        
        NavigationView {
          List(AppMainFeatureData.dateItems, id: \.self) { item in
            NavigationLink(destination: DateFeatureController(svc: tabBarController.svc, feature: item),
                           tag: item, selection: $selectedItem) {
              ImageText(text: item.title, imageName: item.iconName)
            }
          }
          .navigationBarTitle(SideBarSection.dates.title)
        }
      }
    }

这是我的 UIViewControllerRepresentable:

struct DateFeatureController: UIViewControllerRepresentable, MiscellaneousHelper {
  let svc: SplitViewController
  let feature: AppMainFeatureData
  
  func makeUIViewController(context: Context) -> UINavigationController {
    UINavigationController(rootViewController: feature.viewController)
  }
  
  func updateUIViewController(_ uiViewController: UINavigationController, context: Context) {
  }
}

这是我如何在我的 UITabBar 中创建 DateOptions 以及如何将它添加到 viewControllers:

let dateViewController = UIHostingController(rootView: DateOptions(tabBarController: self))
dateViewController.tabBarItem = tabBarItem
viewControllers?.insert(dateViewController, at: 1)

这是我从 UITabBar 设置 selectedItem 的方法:

    if let dateFeature = viewControllers?[selectedIndex] as? UIHostingController<DateOptions> {
        dateFeature.rootView.selectedItem = .dateAddSubtract
        dPrint("After \(dateFeature.rootView.selectedItem)")
  }

但是打印显示 selectedItem 为零。

当用户触摸列表条目时,一切正常。

如何从 UIKit 设置 selectedItem?

标签: swiftuistate

解决方案


推荐阅读