#iphone #objective-c #ios #xcode #uinavigationcontroller
#iPhone #objective-c #iOS #xcode #uinavigationcontroller
Вопрос:
Итак, если я нахожусь на экране, я могу перейти к следующему экрану навигации с помощью pushViewController, и я просто перейду к следующему экрану, нажав кнопку возврата к предыдущему экрану.
Работает ли предыдущий экран (экран, на который нас выводит кнопка «Назад»)… есть ли у него название? (Как в предыдущей ОС ViewController что-то подобное)??
Моя цель, стоящая за этим вопросом:
Если у меня 5 экранов (1, 2, 3, 4, 5 соответственно)… допустим, я перемещаюсь с 1 -> 3, а в другом случае я перемещаюсь с 2 -> 3. Я хочу сказать, что если «PreviousViewController был 1», то перейдите от 3 к 4 (1 -> 3 -> 4), в противном случае, если предыдущий ViewController был равен 2, я хочу перейти к 3, чтобы 5 (2 -> 3 -> 5)…
Как мне выполнить что-то подобное?
Спасибо!
p.s. Я знаю, что мог бы также попробовать что-то разумное и логичное с другим подходом и просто pushViewController соответственно. Но если есть решение для проверки предыдущего ViewController, это упростило бы мою задачу и стало бы отличным опытом обучения.
Ответ №1:
На самом деле вы можете сделать это, используя viewControllers
свойство UINavigationController
. Вот что Apple говорит по этому поводу:
Корневой контроллер просмотра находится в массиве с индексом 0, контроллер заднего вида — с индексом n-2, а верхний контроллер — с индексом n-1, где n — количество элементов в массиве.
Ваш «предыдущий контроллер» — это то, что Apple определяет как «контроллер заднего вида», соответствующий индексу n-2:
NSUInteger arraySize = [navController.viewControllers count];
UIViewController* prevController = [navController.viewControllers objectAtIndex:count-2];
Комментарии:
1. Это было потрясающе. Значит , я просто проверяю значение в массиве и принимаю свои решения соответствующим образом? Хотя это кажется простым, мне интересно, есть ли там какой-нибудь пример кода, чтобы я не допускал ошибок..
2. Документация Apple довольно ясна, поэтому вы должны быть в безопасности. Во всяком случае, я добавил небольшой образец.
3. Замечательный человек. Все работает. Последний вопрос. Могу ли я проверить что-то подобное? Если (prevController) является членом @class DateInfoViewController, то сделайте это; иначе сделайте это …. ?
4. вот оно:
if ([prevController isKindOfClass:[DateInfoViewController class]])
. Если вы считаете, что этот ответ подходит для вашего вопроса, вы также можете принять его! 🙂
Ответ №2:
Нет, предыдущего ViewController не существует. UINavigationController реализован в виде стека, поэтому вы продолжаете нажимать контроллеры просмотра, и они могут сами выскакивать из стека.
К вашему сведению, если вы пытаетесь просмотреть весь стек viewcontrollers, то UINavigationController имеет свойство с именем «ViewControllers», которое реализовано как NSArray.
Комментарии:
1. Позвольте мне изложить свою цель за этим вопросом, чтобы вы могли сообщить мне о реализации.