Как получить доступ к стеку в UINavigationController - PullRequest
23 голосов
/ 27 июня 2011

viewControllers

Контроллеры представления в настоящее время на стек навигации.

@property(nonatomic, copy) NSArray * viewControllers

Обсуждение

Контроллер корневого представления имеет индекс 0 в массив, контроллер заднего вида находится в Индекс N-2, а верхний контроллер по индексу n-1, где n - число элементы в массиве.

Назначение нового массива представлений контроллеры к этому свойству эквивалентно вызову setViewControllers: animated: метод с анимированным параметром, установленным на NO.

Я запутался, как получить доступ к стеку. У меня есть три представления в контроллере навигации - контроллер корневых представлений, местоположение тестирования sti, карта sti.

Как получить доступ к стеку?

Ответы [ 3 ]

46 голосов
/ 28 июня 2011

UINavigationControllers имеет свойство с именем viewControllers, как вы указали выше.Поскольку это массив контроллеров представления, ссылка на конкретный контроллер представления в этой иерархии ничем не отличается от доступа к любому другому объекту в массиве.

UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];

Кроме того, ознакомьтесь с Navigation Controllers статья в iOS Developer Library, в частности, раздел «Изменение стека навигации».

5 голосов
/ 28 июня 2011

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

Так что, если вы хотите получить второе представлениеконтроллер в стеке, вы должны сделать -

UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1];

Это предполагает, что на навигационном контроллере есть по крайней мере два контроллера представления.

4 голосов
/ 28 июня 2011

Массив, возвращаемый свойством viewControllers, является стеком. Они упорядочены в той же последовательности, в которой они были показаны. контроллер с индексом 0 - это контроллер, с которого вы начали. Контроллер, на который вы сейчас смотрите, имеет самый высокий индекс. Поскольку индексы отсчитываются от нуля, последним индексом элемента будет count (n) -1.

Теперь вы говорите "просмотры" в своем посте. Существует разница между представлениями и контроллерами представления. Если вы говорите о нескольких частях, которые все видимы одновременно, то вы говорите о представлениях, а не о контроллерах представлений. Контроллер навигации предназначен для работы с несколькими контроллерами представления. Если вы имеете дело с представлениями, то вы хотите получить доступ к подпредставлениям текущего представления контроллера представления myViewController.view.subviews Они упорядочиваются аналогично.

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