【发布时间】:2020-11-12 18:16:05
【问题描述】:
我正在尝试使用 UIViewControllerRepresentable 将 UITabBarController 包装在 SwiftUI 视图中,但遇到了一个我好几天都无法解决的问题。我已经查看了每一个可能的线程,并尝试了所有提出的解决方案,但没有运气。任何帮助将不胜感激。
TabViewController.swift
import UIKit
import ResearchKit
import CareKit
import SwiftUI
struct TabBarView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UITabBarController {
let tabBarViewController = TabBarViewController()
return tabBarViewController
}
func updateUIViewController(_ uiViewController: UITabBarController, context: Context) {
}
typealias UIViewControllerType = UITabBarController
}
class TabBarViewController: UITabBarController {
fileprivate let carePlanStoreManager = CarePlanStoreManager.sharedCarePlanStoreManager
fileprivate let carePlanData: CarePlanData
fileprivate var symptomTrackerViewController: OCKSymptomTrackerViewController? = nil
fileprivate var insightsViewController: OCKInsightsViewController? = nil
fileprivate var insightChart: OCKBarChart? = nil
required init?(coder aDecoder: NSCoder) {
carePlanData = CarePlanData(carePlanStore: carePlanStoreManager.store)
super.init(coder: aDecoder)
carePlanStoreManager.delegate = self
carePlanStoreManager.updateInsights()
let careCardStack = createCareCardStack()
let symptomTrackerStack = createSymptomTrackerStack()
let insightsStack = createInsightsStack()
let connectStack = createConnectStack()
self.viewControllers = [careCardStack,
symptomTrackerStack,
insightsStack,
connectStack]
tabBar.tintColor = UIColor.systemTeal
tabBar.barTintColor = UIColor.white
}
【问题讨论】:
-
你为什么感到惊讶?您实现了
init(coder:),现在这是您拥有的唯一初始化程序。当您说TabBarViewController()时,您正在调用不同的初始化程序init(),但它并不存在。就好像你对我说“来,拿这双蓝鞋”然后又说“请把红鞋给我”。什么红鞋? -
哈哈我喜欢这个比喻,明白你的意思。我试过初始化它并插入各种参数,但没有运气。如何在结构中插入相同的初始化程序?
标签: swift xcode uiviewcontroller swiftui nscoder