我想知道是否有人可以解释下面的代码块,因为我真的不明白它。
self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
然后,当您想要呈现一个新的vc时,您可以这样做:
OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ];
[ self.navigationController pushViewController:ovc animated:YES ];
要回去做:
[ self.navigationController popViewControllerAnimated:YES ];
答案 0 :(得分:0)
简单的解释。
每个iOS应用程序至少有一个UIWindow
,它总是需要一个UIViewController
对象来设置为根,这意味着将其设置为应用程序的初始ViewController,用户可以在屏幕上看到它。
而UINavigationController
是堆栈容器,它将ViewControllers推入其中,并且默认情况下,此档位中的顶部ViewController仅对屏幕可见。但最初需要UIViewController
在UIWindow
和UINavigationController's
根视图控制器中设置为根视图控制器,它们需要一个起点。两者的工作方式不同,UIWindow
根视图控制器可以随时更改,但UINavigationController
不允许我们更改根视图控制器。
现在,在您的代码中,让我向您解释发生了什么。
self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
//In Above Line you are loading a UIViewController from a Xib file name RootViewController.xib into viewController property
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ];
//In Above Line You are allocating a new navigation controller programatically with a root/initial view controller and you are passing your previously loaded view controller to be set as root view controller of this navigation.
self.window.rootViewController = self.navigationController;
//In Above Line You are assigning your navigationController to UIWindow object this means you want your view controllers to be managed in a stack so that if you push a view controller you can snap back easily with a single line of code.
[ self.navigationController popViewControllerAnimated:YES ];
//In This Line you are removing your Top view Controller from a navigation stack Like the Back button does in Setting>General to Setting in iPhone/iPad
答案 1 :(得分:0)
导航控制器需要一个“根”视图控制器,它是它管理的视图控制器堆栈中的底部视图控制器。
#1 self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
#2 self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ];
#3 self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
#4 [self.window makeKeyAndVisible];
第1行创建类“RootViewController”的视图控制器(必须是自定义视图控制器类。)它从同名的nib文件加载视图控制器的视图。这类似于使用instantiateViewControllerWithIdentifier从故事板加载视图控制器,除了你必须指定你正在创建的视图控制器的类,以及你正在加载的nib文件
第2行使用新创建的“RootViewController”创建一个导航控制器,因为它是根视图控制器
第3行将导航控制器安装为应用程序窗口的根视图控制器。
第4行使应用程序窗口成为活动窗口。