Несколько уровней иерархии с контроллером навигации - PullRequest
1 голос
/ 15 марта 2009

Я пытаюсь заставить работать несколько уровней иерархии с навигационными контроллерами. У меня есть 3 уровня иерархии и Я могу двигаться вниз по уровням иерархии, но я могу вернуться только на один уровень, а не на два, вернуться к стартовому вид.

Я начинаю с создания контроллера навигации для View # 1 и нажимаю следующий вид, вид №2, на него. Затем я добавляю навигационный контроллер к подпредставление окна в didSelectRowAtIndexPath. Нажав на строка таблицы в View # 1 выводит меня на следующий уровень hiearchy View # 2.

Это следующее представление уровня hiearchy также является представлением таблицы. Вот где Я думаю, что проблема возникает. Я создаю еще один навигационный контроллер и нажмите View # 3 на него в didSelectRowAtIndexPath в представлении Контроллер для просмотра # 2. Нажатие на строку таблицы в представлении № 2 занимает мне посмотреть # 3. Но когда я использую кнопку «Назад», чтобы вернуться к представлению № 2, Я возвращаюсь к пустому представлению, а не к реальному представлению №2.

  1. Нужен ли мне только один навигационный контроллер для обработки 3 уровней hiearchy вместо двух навигационных контроллеров?

  2. Если № 1 - да, то как мне передать контроллер навигации для просмотра № 2 контроллер, чтобы я мог нажать View # 3 на навигационный контроллер?

  3. Или мне нужно перенести все три вида на контроллер навигации в представлении № 1?

  4. Или ...?

Заранее спасибо,

Jim

Ответы [ 4 ]

4 голосов
/ 15 марта 2009

UIViewController был разработан для совместной работы с UINavigationController. При нажатии на новое представление UINavigationController будет вставлять ссылки на себя и на UINavigationItem, содержащее метаданные о навигации (кнопка «Назад» с названием представления позади него и т. Д.).

Как правило, вы хотите инициализировать UINavigationController с помощью Interface Builder, используя поле «Имя NIB» для указания «корневого контроллера представления» (т. Е. Первого появившегося представления, которое не должно иметь кнопку возврата). Эквивалент в коде выглядит примерно так:


UIViewController *rootController = [[UIViewController alloc] initWithNibName:@"RootController"];
UINavigationController *navCtl = [[UINavigationController alloc] initWithRootController:rootcontroller];

Затем, когда вам нужно добавить новый контроллер представления (возможно, в вашем didSelectRowAtIndexPath методе делегата в вашем rootController)


SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController"];
[self.navigationController pushViewController:secondViewController];
[secondViewController release];

Обратите внимание, что вам не нужно было создавать свойство self.navigationController, оно уже определено в UIViewController и будет введено с правильной ссылкой в ​​зависимости от текущего состояния навигации. Работает как по волшебству!

4 голосов
/ 16 марта 2009

Пример кода DrillDownSave с сайта Apple Developer:

https://developer.apple.com/library/ios/#samplecode/DrillDownSave/

делает именно то, что я ищу, с тремя уровнями иерархии просмотров с помощью контроллера навигации. Спасибо за ваши ответы.

Jim

1 голос
/ 15 марта 2009

Как правило, вся ваша иерархия должна содержаться в одном UINavigationController. Я не уверен, поддерживается ли их вложение.

0 голосов
/ 24 марта 2009

Как бы вы это сделали, если последующие представления являются дополнительными экземплярами одного и того же контроллера, то есть истинной иерархии не более чем табличных представлений ... в примере показаны жестко закодированные представления ... но они, по сути, делают то же самое , Мой фон OO говорит, что если я выделю / инициализирую новый экземпляр контроллера, не смогу ли я нажать его, а затем восстановить его состояние после всплытия (кнопка назад)? Это не работает для меня. Каждый экземпляр контроллера (UITableViewController) имеет свой собственный экземпляр массива в качестве своих данных ...

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