我正在尝试在Tabbar Controller中嵌入的应用程序中使用Rxswift。
我在标签栏中有三个视图控制器。所有视图控制器中的订阅很少。但是为了简单起见,可以说第一和第二视图控制器订阅第三视图控制器以获取一些值。
我已按代码订阅了第三个视图控制器;
func startSubscription() {
let settingsNavigationVC = self.tabBarController?.viewControllers![2] as! UINavigationController
let settingsVC = settingsNavigationVC.topViewController as! SettingsViewController
settingsVC.selectedUser.subscribe(onNext: { [weak self] user in
self?.userToShow = user
}).disposed(by: disposeBagForFirst)
}
如果在操作任何数据之前先轻按所有选项卡,则所有订阅都可以启动并且所有应用正常运行,这可以正常工作。但是,如果用户在加载应用程序后直接点击第三个vc,然后进行更改。然后,第一个vc处的数据将得到更新,因为它已在应用启动时已加载,但第二个vc处的数据没有更改,因为还没有订阅,因为在第三个vc中进行更改之前尚未加载视图。>
我尝试使用实例化vc方法来执行此操作,但这也不起作用,因为使用选项卡栏控制器,实例化视图不止一次。
我的问题是;我该如何确保在用户与该应用进行交互之前加载所有视图,或者无论是否单击了所有选项卡(加载了视图),如何更改我的订阅方法以使其起作用。
谢谢。
答案 0 :(得分:0)
在此解决方案中,我从第一个vc的viewDidLoad()方法加载所有视图。如果您对如何修改订阅技术有任何想法,而不必加载所有视图,请提供答案。
感谢How to load all views in UITabBarController?
,我找到了解决方案由于我使用导航控制器,因此略有不同。在所有配置,数据提取和所有操作完成之后,我在viewDidLoad()的末尾调用此方法。
func loadAllViewsOfTabbarController() {
if let viewControllers = tabBarController?.viewControllers {
for viewController in viewControllers {
let viewInNav = viewController as! UINavigationController
let _ = viewInNav.topViewController?.view!
}
}
}