2017-01-01 1 views
-5

Мне было интересно, может ли кто-нибудь объяснить следующий блок кода, потому что я его действительно не понимаю.Нужна помощь в понимании UIViewController и инициализации UIWindow

self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
self.navigationController = [[ UINavigationController alloc ] initWithRootViewController:self.viewController ]; 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

Затем, когда вы хотите, чтобы представить новый виртуальный канал вы можете сделать это:

OtherViewController *ovc = [[ OtherViewController alloc ] initWithNibName:@"OtherViewController" bundle:nil ]; 
[ self.navigationController pushViewController:ovc animated:YES ]; 

Чтобы вернуться сделать это:

[ self.navigationController popViewControllerAnimated:YES ]; 
+0

Что вы не понимаете, в частности? Это довольно старый школьный код с использованием XIB-файлов, а не раскадровки, но для меня это кажется самораспространяющимся. –

+0

Что делают первые четыре строки? Я знаю, что последние три предназначены для создания navigationController и навигации между viewControllers. – 12345

+0

первые четыре являются конструкторами/кодом инициализации для этих элементов, а также заданиями – mike510a

ответ

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]; 

Line 1 создает контроллер представления класса «RootViewController» (который должен быть настраиваемое представление класса контроллера.) Он загружает взгляды контроллера представления от nibfile одного и того же имени. Это похоже на использование instantiateViewControllerWithIdentifier для загрузки контроллера вида из раскадровки, за исключением того, что вы должны указать класс контроллера вида, который вы создаете, и файл nib, который вы загружаете.

Строка 2 создает контроллер навигации с вновь созданный «RootViewController», поскольку он является контроллером корневого представления

Строка 3 устанавливает контроллер навигации в качестве контроллера корневого представления окна приложения.

Строка 4 делает окно приложения активным.

0

Объяснение в простых словах. Каждое приложение iOS имеет как минимум 1 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 
Смежные вопросы