公平地說,定義爲MainWindow.xib的一部分的Controller是應用程序的根控制器?rootViewController澄清需要
此外,假設RootController始終是負責向用戶顯示什麼視圖的人員,這是否屬實?
公平地說,定義爲MainWindow.xib的一部分的Controller是應用程序的根控制器?rootViewController澄清需要
此外,假設RootController始終是負責向用戶顯示什麼視圖的人員,這是否屬實?
這恰好出現在一些基於標準IB窗口的項目中,但最終需要一個窗口和一個視圖來向用戶顯示某些內容。
就認爲:
考慮這一點。我創建了一個空項目,添加一個視圖(只是MyView.xib),添加一個按鈕到這個和這個代碼。沒有根控制器 - 只是窗口和視圖。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
UINib *nib = [UINib nibWithNibName:@"MyView" bundle:nil];
UIView *myView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
[[self window] addSubview:myView];
[self.window makeKeyAndVisible];
return YES;
}
對於基於一個典型的窗口:
的-info.plist點的MainWindow.xib(主要筆尖文件基本名稱),文件所有者指向應用程序的委託,應用程序委託的的viewController指向一個UIViewController。然後,通常,將窗口rootviewController設置爲上面設置的viewController。
- (BOOL)application:(UIApplication *)application didFinis hLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window.rootViewController = self.viewController;
但是,如果你看這個導航基於應用程序(MasterDetail項目),沒有MainWindow.xib文件。
main.m指向appDelegate。
應用程序的委託創建一個navigationController和navigationController主控制器,這是編程創建成爲rootViewContoller
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil] autorelease];
self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
最後,在此方案示例中的窗口RootViewController的甚至沒有設置。
導航控制器的視圖直接添加到窗口。在一天結束時,窗戶只是託管一個視圖。您可以設置它或者根控制器可以控制它。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// create window since nib is not.
CGRect windowBounds = [[UIScreen mainScreen] applicationFrame];
windowBounds.origin.y = 0.0;
[self setWindow:[[UIWindow alloc] initWithFrame:windowBounds]];
// create the rootViewController
_mainViewController = [[MainViewController alloc] init];
// create the navigationController by init with root view controller
_navigationController = [[UINavigationController alloc] initWithRootViewController:_mainViewController];
// in this case, the navigation controller is the main view in the window
[[self window] addSubview:[_navigationController view]];
[self.window makeKeyAndVisible];
return YES;
}
並不總是如此。我偶爾會將一個rootviewcontroller設置爲navigationController。在項目設置中,您可以指定啓動時首先加載的Xib。但除此之外,是的,rootviewcontroller可以佈局子視圖並彈出給其他人,但是當試圖決定向用戶呈現什麼視圖時,導航控制器纔是真正的優勢。 – CodaFi
請以「答覆」 – JAM