iOS
开发方面我是新手,我正在尝试构建我的第一个应用程序。我正在在线平台上学习课程,该课程在
AppDelegate -> application didFinishLaunchingWithOptions
:
let navigationController = window?.rootViewController as! UINavigationController
let notebooksListViewController = navigationController.topViewController as! NotebooksListViewController
notebooksListViewController.dataController = dataController
此应用具有一个Navigation controller
开头的UIViewController
。
我在这里有2个问题,首先是为什么这样做有效,我的意思是,我在AppDelegate
中,因此NotebooksListViewController
(应用程序的第一个视图)尚未实例化(我认为),那么为什么我可以在其中注入变量?
另一方面,第二个问题是,如何在不同的场景中执行此操作?我有一个TabBarViewController
作为第一个场景,第一个选项卡是一个UITableViewController
,我想以相同的方式注入我的dataController var,如何实现呢?我无法做到,也无法理解。
谢谢。
答案 0 :(得分:0)
它有效,因为有一些Xcode魔术: 在目标设置的常规选项卡中,主界面条目指定在应用启动时将自动加载的情节提要的名称:< / p>
在情节提要中,将实例化 Initial View Controller 。看来这是一个 UINavigationController 。 由于这是自动完成的,因此它可以正常工作-直到您想做一些特别的事情:-)
如果您想从不同的场景开始-也许从不同的视图控制器开始-只需将主界面更改为另一个情节提要,即 Initial View Controller >(位于情节提要板内部)或两者兼有。
或者,您可以自己启动,只需将主界面留空,然后在应用程序委托(didFinishLaunchingWithOptions
)中创建自己的视图控制器,就像
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
if let tabVC = mainStoryboard.instantiateViewControllerWithIdentifier("TabCtrl") as? UITabBarController {
self.window?.rootViewController = tabVC
// Access the subcontrollers, or create them
// Initialize their values
// tabVC.viewControllers[0].data = ...
} else {
// Ooops
}
self.window?.makeKeyAndVisible()
答案 1 :(得分:0)
第一个问题的答案
因为方法名称是自解释的didFinishLaunchingWithOptions
,这意味着您的应用程序已完成启动并带有选项,并且即将在前台进入,因此此处应用程序需要设置rootViewController,因此在此方法控制器中您要设置为视图控制器开始了,这就是为什么您可以在其中注入变量
第二个问题的答案
let navigationController = window?.rootViewController as! UITabbarController
let VC = navigationController.childViewController
//Now Using VC you can access all you controller of tabbar controller
let notebooksListViewController = navigationController.topViewController as!
NotebooksListViewController
notebooksListViewController.dataController = dataController
现在如上所示,您可以使用VC
来访问视图控制器
但请注意此处,因为VC
返回viewcontroller数组,因此您需要检查要访问的垂直VC