Как получить доступ к стеку в UINavigationController
viewControllers
Контроллеры представлений, которые стек навигации.
@property(nonatomic, copy) NSArray * viewControllers
Обсуждение
Контроллер корневого представления имеет индекс 0 в массив, контроллер обратного просмотра находится в индекс n-2, а верхний контроллер - при индексе n-1, где n - число элементов в массиве.
Назначение нового массива вида контроллеры этого свойства эквивалент вызова setViewControllers: анимированный: метод с анимированным параметром, установленным на NO.
Я запутался, как получить доступ к стеку. У меня три вида в контроллере навигации - контроллер корневого представления, место тестирования sti, sti map.
Как я могу получить доступ к стеку?
Ответы
Ответ 1
UINavigationControllers
имеют свойство, называемое viewControllers
, как вы сказали выше. Поскольку это массив контроллеров View, обращение к определенному контроллеру представления в этой иерархии не отличается от доступа к любому другому объекту в массиве.
UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];
Кроме того, ознакомьтесь с навигационными контроллерами в библиотеке разработчиков iOS, в частности в разделе "Изменение навигационного стека".
Ответ 2
Предполагая, что вы имели в виду, что ваш контроллер навигации имеет три контроллера вида, вы должны иметь доступ к контроллеру навигации из любого из трех контроллеров представления, используя self.navigationController
.
Итак, если вы хотите получить второй контроллер представления в стеке, вы должны сделать -
UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1];
Предполагается, что на контроллере навигации есть как минимум два контроллера вида.
Ответ 3
Массив, возвращаемый свойством viewControllers, представляет собой стек. Они упорядочены в той же последовательности, в которой они были показаны. контроллер с индексом 0 - это контроллер, с которого вы начали. Контроллер, который вы сейчас просматриваете, является самым высоким индексом. Поскольку индексы подсчитываются с нуля, последним индексом элемента будет счетчик (n) -1.
Теперь вы говорите "взгляды" в своем посте. Существует разница между представлениями и контроллерами представлений. Если вы говорите о нескольких частях, которые все видимы одновременно, вы говорите о просмотрах, которые не видят контроллеры. Контроллер навигации предназначен для обработки нескольких контроллеров. Если вы имеете дело с представлениями, чем хотите получить доступ к подзонам текущего представления контроллера представления myViewController.view.subviews
Они упорядочивают себя аналогичным образом.