Swift-在ViewController中注入变量
我对iOS的开发感到非常自豪,我正在尝试构建我的第一个应用程序。我正在一个在线平台上学习一门课程,在Swift-在ViewController中注入变量,swift,appdelegate,Swift,Appdelegate,我对iOS的开发感到非常自豪,我正在尝试构建我的第一个应用程序。我正在一个在线平台上学习一门课程,在 AppDelegate->application didnishlaunchingwithoptions: let navigationController = window?.rootViewController as! UINavigationController let notebooksListViewController = navigationController.topViewCo
AppDelegate->application didnishlaunchingwithoptions
:
let navigationController = window?.rootViewController as! UINavigationController
let notebooksListViewController = navigationController.topViewController as! NotebooksListViewController
notebooksListViewController.dataController = dataController
此应用程序有一个导航控制器
,它以UIViewController
开头
我这里有两个问题,首先是为什么这样做,我的意思是,我在AppDelegate
,所以NotebooksListViewController
(应用程序的第一个视图)还没有实例化(我想),那么为什么我能够在其中注入变量呢
另一方面,第二个问题是,我如何在不同的场景中做到这一点?我有一个TabBarViewController
作为第一个场景,第一个选项卡是一个UITableViewController
,我想以同样的方式注入我的dataController变量,我如何才能做到这一点?我无法做到,也无法理解
提前感谢。它可以工作,因为有些Xcode魔法: 在目标设置的“常规”选项卡中,主界面条目指定应用程序启动时自动加载的情节提要的名称: 在故事板中,初始视图控制器将被实例化。这似乎是一个UINavigationController。 因为这是自动完成的,所以它只会工作-直到您想做一些特殊的事情:-) 如果您想从不同的场景(可能是从不同的视图控制器)启动,您可以将主界面更改为另一个故事板、初始视图控制器(在故事板内部)或两者兼而有之 或者,您可以自己启动,将主界面留空,然后在应用程序委托中创建自己的视图控制器(
didfishlaunchwithoptions
),类似于
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()
回答您的第一个问题
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
由于方法名称是不言自明的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谢谢您的回复。这个应用程序本身实例化了初始视图控制器(我只支持这个VC)。我理解。但是如何在代码中获得具体的实例呢?我的意思是,在上面的代码中,我可以插入导航控制器,但无法在TabBarController中获取TableViewController的实例。tab bar控制器有一个属性ViewController
,它是一个包含所有子视图控制器的数组。感谢您的帮助。在我的项目中,我的初始视图控制器是TabBarViewController,第一个选项卡是UITableViewController,如何获取实例?