панель навигации не отображается с программно сделанным UINavigationController - PullRequest
2 голосов
/ 26 января 2012

У меня есть контроллер навигации с именем navController, программно созданный в моем контроллере модального вида во время его viewDidLoad:

self.navController = [[UINavigationController alloc] initWithRootViewController:self];
self.navController.view=self.view;
[self setView:self.navController.view];

Но когда я запускаю контроллер модального вида, я не вижу панель навигации, просто стандартныйсделано в IB.Что не так?

1 Ответ

5 голосов
/ 27 января 2012

Ваше решение не может работать.

Предположим, что у вас есть модальный контроллер с именем ModalViewController. Это простой UIViewController, связанный с созданным XIB-интерфейсом.

Теперь, в какой-то момент вам нужно представить ModalViewController модально. Как вы написали в своей спецификации, я думаю, что вы также хотите использовать UINavigationController и управлять его панелью навигации.

Код для этого может быть следующим, где presentModally может быть методом, которого нет в ModalViewController.

- (void)presentModally:(id)sender {

   ModalViewController *modalController = [[ModalViewController alloc] initWithNibName:@"ModalView" bundle:nil]; 

   // Create the navigation controller and present it.
   UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:modalController];

   [self presentViewController:navigationController animated:YES completion: nil];
}

Теперь, в пределах viewDidLoad вашего ModalViewController, у вас есть доступ к свойству navigationController. Таким образом, вы можете контролировать поведение navigationController. Например:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // the code changes the title for the navigation bar associated with the UINavigationController
    self.title = @"Set from ModalViewController";
}

Некоторые заметки

Чтобы понять, как работает UINavigationController, прочитайте Справочник по классам UINavigationController

Чтобы понять, как работают модальные контроллеры, прочитайте Документация модальных контроллеров

Код, который я предоставил, является простым примером и только демонстративным (я написал от руки, поэтому проверьте синтаксис). Вам необходимо уделить внимание управлению памятью и тому, как представить модальные контроллеры. В частности, как следует из документации Apple, для представления модальных контроллеров необходимо выполнить следующие действия:

  1. Создайте контроллер представления, который вы хотите представить.

  2. Установите для свойства modalTransitionStyle контроллера представления требуемое значение.

  3. Назначить объект делегата контроллеру представления. Обычно делегатом является контроллер представления. Делегат используется представленными контроллерами представления, чтобы уведомить представляющий контроллер представления, когда он готов быть отклоненным. Он также может сообщать делегату другую информацию.

  4. Вызвать presentViewController: animated: завершение: метод текущего контроллера представления, передавая контроллер представления, который вы хотите представить.

  5. Запустить (при необходимости) какое-либо действие, чтобы закрыть модальный контроллер.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...