2

У меня есть серия вложенных навигационных контроллеров (потому что я хочу, чтобы верхняя панель навигации была наверху, и я не могу заставить эту панель выглядеть корректно, не используя навигационный контроллер).Отклонить modal ViewControllers

Так в основном это выглядит следующим образом: -NavigationController-VC1 -> (Modal) - NavigationController-VC2 -> (модальный) ... и т.д.

Когда я в резюме ViewController, последний - я хочу, чтобы кнопка вернула пользователя к самому корневому ViewController. Как я могу это сделать?

Я попытался popToRootViewControllerAnimated, но это не работает, как у меня есть ряд навигационных контроллеров (лучшее решение ??)

Спасибо!

Редактировать

Навигация Сейчас:

Navigation Controller -> VC1 - (модальный) -> VC2 - (модальный) -> VC3 ... и так далее

ответ

0

Вы не говорите, используете ли вы раскадровки или нет, но если вы пытаетесь разыгрывать развязки. What are Unwind segues for and how do you use them?

Использование размотки segue должно вернуть вас туда, где вам нужно находиться в иерархии.

+0

Извините, да. Я использую раскадровки. – Erik

+0

. Затем вы можете использовать функцию размотки segue, чтобы потом вернуться в любую иерархию. – pidge

+0

Я использовал ваш подход, и он работал очень хорошо. Я также добавил метод prepareForSegue, чтобы сделать код сохранения;) Спасибо! – Erik

0

popToRootViewController:Animated вернется только к [0] контроллера контроллеров вашего контроллера навигации. Другими словами, корень первого контроллера навигации всегда будет VC1, а корень вашего второго навигационного контроллера всегда будет находиться в VC2. Вы должны пересмотреть структуру своего приложения, потому что у вас не должно быть одного контроллера навигации, толкайте его на другой - это не имеет смысла. Вот что вы можете сделать:

Navigation Controller -> VC1 -> (push segue) -> VC2 -> (push segue) -> VC3

Таким образом popToRootViewController:Animated будет вернуться к VC1.

Единственная причина, я хотел бы использовать более чем один навигационный контроллер, если у меня был какой-то таблицы с параметрами, такими как:

--- 
A  Navigation Controller -> VCA1 -> (push segue) -> VCA2 -> (push segue) -> VCA3 
--- 
B  Navigation Controller -> VCB1 -> (push segue) -> VCB2 -> (push segue) -> VCB3 
--- 
C  Navigation Controller -> VCC1 -> (push segue) -> VCC2 -> (push segue) -> VCC3 
--- 

Даже в этом случае, контроллер представления корня всегда будет VCA1, VCB1 или VCC1.

Надеюсь, это поможет.

Это также поможет, если вы опубликуете то, что вы пытаетесь выполнить, чтобы мы могли лучше понять ваш вопрос.

+0

Причина, по которой я делал это, заключалась в том, что верхняя панель, в которой у меня была кнопка навигации, была слишком большой. Если бы я добавил пустое приглашение, но слишком маленькое, если бы я этого не сделал. NavigationController сделал его совершенно большим. Я попытаюсь изменить структуру своего приложения, чтобы сделать его более организованным;) Концепция здесь похожа на мастера, добавляя новый элемент и добавляя к этому предмету вещи. Он будет использоваться для работы – Erik

+0

@ Erik, о, хорошо круто. Помните, что вы можете подклассифицировать элементы, чтобы они выглядели так, как вы хотите, если вы не хотите справляться с дополнительной сложностью контроллера навигации. Также вы упомянули, что это мастер и что вы будете «добавлять» подсказки и т. Д. На мой взгляд, все сценарии должны быть загружены уже и не должны динамически генерироваться на этом пути. – Carpetfizz

+1

Да. Спасибо !;) - Я сейчас немного посплю и продолжу завтра, опоздаю здесь – Erik

0

Написав первую строчку, вы получите Индексы всех контроллеров просмотра и со второй линии. Вы достигнете своего места назначения.

NSArray * array = [self.navigationController viewControllers];

[self.navigationController popToViewController: [массив objectAtIndex: 2] анимированный: ДА];

+0

Я пробовал это сейчас, но абсолютно ничего не происходит:/- сделал NSLog после popToViewController и он записывает журнал, но он не появляется в viewcontroller , Любые идеи почему? См. Мой обновленный вопрос о том, как теперь выглядит навигационная система. – Erik

0

Если вы используете тот же контроллер навигации для всех контроллеров просмотра, что и эта линия, отлично подходит для вас.

[self.navigationController popToRootViewControllerAnimated:YES]; 

, но в вашем случае, если вы представляете вид модели controller.for этом случае вам нужно отклонить первый контроллер представления модели перед другой.

+0

Я мог бы использовать этот подход, но тогда пользователь не смог бы вернуться назад в «волшебнике», – Erik

Смежные вопросы