Да .. когда я начал разработку для iPhone ... рутина rootViewController тоже бросила меня в тупик.Но это действительно просто.
когда приложение запускается, я создаю объект UIWindow в своем классе делегата приложения.Кроме того, в этом классе у меня есть свойство типа UIWindow с именем window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIWindow *w = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
self.window=w;
[w release];
// other code here...
}
Затем я создаю UIViewController
, чей view
будет первым представлением в иерархии окон, это можно назвать«контроллер корневого представления».
Запутанная часть состоит в том, что ... часто мы создаем UINavigationController
как «контроллер корневого представления», и у этого контроллера навигации есть метод init, который запрашивает «RootViewController», который является первым viewcontroller, который он поместит в свой стек.
Итак, окно получает «корневой контроллер представления», то есть UINavigationController
, который также имеет RootViewController, который является первым контроллером представленияВы хотите показать.
после того, как вы с этим разберетесь, все это имеет смысл .. Я думаю :-)
вот код, который делает все это .. (взят из проекта, который яесть передо мной)
//called with the app first loads and runs.. does not fire on restarts while that app was in memory
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//create the base window.. an ios thing
UIWindow *w = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
self.window=w;
[w release];
// this is the home page from the user's perspective
//the UINavController wraps around the MainViewController, or better said, the MainViewController is the root view controller
MainViewController *vc = [[MainViewController alloc]init];
UINavigationController *nc = [[UINavigationController alloc]initWithRootViewController:vc];
self.navigationController=nc; // I have a property on the app delegate that references the root view controller, which is my navigation controller.
[nc release];
[vc release];
//show them
[self.window addSubview:nc.view];
[self.window makeKeyAndVisible];
return YES;
}