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

viewControllers

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

 @property (nonatomic, copy) NSArray * viewControllers
 

Обсуждение

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

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

Я не понимаю, как получить доступ к стеку, у меня есть три представления в контроллере навигации - контроллер корневого представления, место тестирования sti, карта sti.

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

23
задан Jon Schneider 19 September 2013 в 20:54
поделиться

3 ответа

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

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

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

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

5
ответ дан 29 November 2019 в 01:22
поделиться

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

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

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

46
ответ дан 29 November 2019 в 01:22
поделиться

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

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

4
ответ дан 29 November 2019 в 01:22
поделиться