2016-06-25 2 views
0

У меня есть навигационный контроллер в моем приложении. Первый экран в его стеке - TermConditionVC, затем LoginVC, затем MainVC. Когда я запускаю, он переходит непосредственно к Условиям использования VC.Swift: Пропуск первых (и более) экранов в стеке контроллера навигации

Однако, в зависимости от того, пользователь когда-то согласился с Условиями и/или выполнил вход или нет, я хочу пропустить Условия использования VC и/или LoginVC и перейти непосредственно в MainVC.

Это не имеет смысла для меня, чтобы иметь несколько контроллеров навигации в этой ситуации, но я не могу понять, как пропустить экран (особенно самый первый экран в навигационном контроллере стека?

+0

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

+0

как-то мне не хватает проблемы. Почему бы вам просто не нажимать «MainVC» в стек? – Sulthan

ответ

5

в файл AppDelegate.swift-х применение функции (didFinishLaunchingWithOptions) ...

во-первых, получить раскадровки файл в коде:

let storyboard = UIStoryboard(name: "your_storyboard_name_here", bundle: nil) 

Следующая получить корень ViewController. В вашем случае это может быть UINavigationController. Контроллер корень только что бы то ни точек со стрелками в раскадровки файле

let root = storyboard.instantiateViewControllerWithIdentifier("root") as! UINavigationController 

«корень» это что-то вам на самом деле нужно назвать в файле раскадровки. Итак, зайдите в «StoryboardName» .storyboard и нажмите на UINavigationController. Перейдите к инспектору идентификации (третья вкладка слева) и введите идентификатор раскадровки. Пока вы на него, положить в раскадровки ID для зрения вы хотите, чтобы перейти к

Третий

let destination = storyboard.instantiateViewControllerWithIdentifier("main_vc") 

Четвертый

root.pushViewController(destination, animated: false) 

Вы можете установить анимацию ложным, так что вы не» t показывается анимация по умолчанию, когда вы переходите к этому представлению. Я уверен, что пользователь скажет это, и все будет выглядеть так, как будто ничего не произошло. Это может поставить их

Пятого

self.window?.rootViewController = root 

На этом шаге вы установите текущее окно в корень. Помните, что root - это ваш UINavigationController, который только что нажал MainCC ViewController. Если вы не установили UINavigationController, и вместо этого вы установите MainVC ViewController, вы потеряете свою навигационную панель. Поэтому убедитесь, что вы установили корень (UINavigationController), а не ViewController, чтобы вы могли сохранить свою навигацию.

+0

Прохладный. Я проверю его, а затем выберем ваш ответ. Это то, что называется нажатием/заменой представлений в стеке навигации? – Kashif

+1

Да. Навигационный стек буквально похож на Stack, как следует из названия. Таким образом, вы будете нажимать на них сверху и всплывать при переходе к предыдущим представлениям. Лучший способ запомнить это - просто наклонить голову, глядя на свою раскадровку, чтобы навигационный контроллер находился на дне. Затем, следуя стрелкам направления, представьте, что каждый ViewController вставляется в стек. И как вы идете против направления стрелок, которые так же, как popping из стека – Eyesofbanquo

+0

Как я могу использовать этот код внутри обычного ViewController, а не AppDelegate?(Нет никакой переменной окна, если внутри AppDelegate) – Kashif

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