Я могу заставить UINavigationController загружаться только на 2-м уровне, а не на Root View Controller - PullRequest
0 голосов
/ 07 сентября 2011

Я пытался найти похожую проблему, но не смог найти похожий вопрос.

Я загружаю UINavigationController в UIView, который не является (как в большинстве примеров) главным окном.

Я создал один новый .xib с именем DocumentsViewController, который является подклассом UIView (он имеет связанные файлы .m и .h). И я создал DocumentsRootViewController.xib, который является подклассом UITableViewController, который должен быть RootViewController UINavigationController.

Я переместился в DocumentsViewController и добавил объект UINavigationController в Интерфейсный Разработчик. Затем я перешел к коду, добавил его, как в IBOutlet, и подключил к объекту.

В ViewDidLoad я выполняю следующие строки:

DocumentsRootViewController *rootViewController = [[[DocumentsRootViewController alloc] init] autorelease];
rootViewController.title = @"Documents";
[navigationControllerDocuments initWithRootViewController:rootViewController];
[self.view addSubview:navigationControllerDocuments.view];    

Показывает таблицу, как задумано, но показывает кнопку «Назад» к «Root View Controller» (как на рисунке ниже).

Почему? Разве он не должен уже знать, что rootviewcontroller был установлен?

Заранее спасибо тем, кто проясняет это сомнение

Giovanni

The UINavigationController behavior Xib Structure

1 Ответ

1 голос
/ 07 сентября 2011

Когда вы добавляете UINavigationController через Nib, он фактически создает экземпляр UINavigationController внутри файла nib с набором RootViewController по умолчанию (типа UIViewController) и с заголовком по умолчанию RootViewController.

При загрузкеперо, этот объект создается как часть загрузки кончика (то есть, когда вы инициализируете DocumentsViewController) - так что выход navigationControllerDocuments уже инициализирован как UINavigationController с уже установленным на нем ViewController по умолчанию.

Что я думаюпроисходит, когда вы вызываете 'initWithRootViewController' - вы вызываете это для уже инициализированного объекта - поэтому он снова запускает код инициализации - помещает второй контроллер представления (DocumentRootViewController) в стек, но тот, который был создан по умолчанию вперо уже там.

Что вы, вероятно, должны сделать, это забыть о создании одного в перо и инициализировать всю программу

то есть, где вы делаете:

[navigationControllerDocuments initWithRootViewController:rootViewController];

Я предлагаю вместо этого выполнить alloc и init:

[[navigationControllerDocuments alloc] initWithRootViewController:rootViewController];

Поскольку вы делаете это, вы действительно нене нужно добавлять контроллер навигации к пиру, поэтому, если это работает, вы должны удалить его из пера, поскольку вы заменяете его на этот в коде.

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