iOS - загрузка контроллера навигации через код - PullRequest
4 голосов
/ 25 мая 2011

У меня есть контроллер навигации, который был настроен с помощью мастера проектов. В настоящее время при запуске приложения автоматически создается и отображается навигационный контроллер.

Теперь мне нужно управлять отображением контроллера навигации с помощью кода, а не с помощью магии .xib. Как отключить автоматическое создание MainWindow.xib / RootViewController.xib? Признаюсь, я на самом деле не знаю, что происходит, и отношения между MainWindow.xib и RootController.xib, когда мастер все это настроил.

Были бы полезны любые ссылки или фрагменты кода. спасибо!

1 Ответ

7 голосов
/ 25 мая 2011

Чтобы создать корневой навигационный контроллер без пера:

В вашем приложении Delegate вы должны увидеть следующее:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

self.navigationController относится кконтроллер навигации, который был загружен из MainWindow.xib (имя этого файла указано в файле Info.plist вашего приложения; см. ниже).

Откройте MainWindow.xib и отключите свойство navigationController вашего делегата приложениязатем удалите объект контроллера навигации (не окна) в палитре объектов.

Удалите свойство IBOutlet из объявления navigationController @property в заголовочном файле вашего делегата приложения (так как он больше не будет связан сфайл пера).

Замените код в вашем делегате приложения следующим текстом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    RootViewController *rootViewController = [[[RootViewController alloc] initWithNibName:nil bundle:nil] autorelease];
    self.navigationController = [[[UINavigationController alloc] initWithRootViewController:rootViewController] autorelease];

    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

Чтобы создать главное окно без пера:

Вероятно, вам не нужно это делать (и я не рекомендую этого), но, поскольку вы (вроде) спросили ...

Удалить MainWindow.xib.

В main.m, заменитьпоследний аргумент UIApplicationMain с именем вашего делегата приложения (без расширения).Например:

int retVal = UIApplicationMain(argc, argv, nil, @"TestProjectAppDelegate");

Откройте файл Info.plist и удалите следующие две строки:

<key>NSMainNibFile</key>
<string>MainWindow</string>

Удалите свойство IBOutlet из объявления window @property в делегате приложения.заголовочный файл.

Создайте окно в вашем делегате приложения:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // The rest stays the same...
}
...