Требуется уточнение rootViewController - PullRequest
1 голос
/ 12 октября 2011

Справедливо ли сказать, что контроллер, определенный как часть MainWindow.xib, является корневым контроллером приложения?

Кроме того, верно ли предположить, что RootController всегда является тем, кто отвечает за то, какое представление отображается пользователю?

1 Ответ

4 голосов
/ 12 октября 2011

Это случается с некоторыми стандартными проектами, основанными на окнах 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 (Mainбазовое имя файла), владелец файла указывает на делегата приложения, viewController делегата приложения указывает на UIViewController.Затем, как правило, для окна rootviewController устанавливается значение viewController, установленное выше.

- (BOOL)application:(UIApplication *)application didFinis hLaunchingWithOptions:    (NSDictionary *)launchOptions
{

    self.window.rootViewController = self.viewController;

Но, если вы посмотрите на это приложение на основе навигации (проект MasterDetail) , MainWindow.xib отсутствует.,

main.m указывает на appDelegate.

делегат приложения создает главный контроллер в 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;
}

И, наконец, в этом программном примере Windows 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...