Как я могу вернуться к контроллеру начального представления в Swift?
Итак, у меня есть окно входа в систему, после успешного входа в систему он переходит к первому представлению навигационного контроллера, тогда пользователь может перейти глубже в представление настроек, а затем в режим выхода из системы. Этот выход из системы должен вернуть пользователя в окно входа в систему (которое не является частью контроллера навигации). Он работает с этим кодом:
let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)
Но в окне входа в систему отображается панель навигации вверху, чего она не должна делать, может быть, есть что-то другое, кроме self.navigationController!.pushViewController
, которое я должен использовать?
Ответы
Ответ 1
SWIFT: Вы должны использовать разматывание.
-
Прежде всего, поставьте следующую строку в свой FirstViewController
:
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
}
У функции на самом деле нет кода внутри.
- Теперь перейдите в свою раскадровку и создайте раскручивание для
LogoutViewController
путем перетаскивания с желтой кнопки на кнопку "Выход". Вот так:
![управление-перетаскивание в действии]()
-
Выберите разворот, созданный для FirstViewController
.
-
Измените идентификатор segue:
![selected segue]()
![изменение идентификатора segue]()
-
Перейдите в код LogoutViewController
и просто вызовите режим размотки:
self.performSegueWithIdentifier("unwindToViewController1", sender: self)
Swift 4
self.performSegue(withIdentifier: "unwindToViewController1", sender: self)
Ответ 2
Посмотрите на разматывание, если вы работаете с раскадровки.
Вам просто нужно создать опцию разматывания в контроллере, для которой вы хотите перейти к:
@IBAction func unwindToMe(segue: UIStoryboardSegue){}
Затем создайте segue из раскадровки.
И когда вам нужно вернуться назад, просто вызовите метод performSegue
с помощью только что созданного идентификатора разворота segue.
Если вы хотите сделать это только из кода, вы просто можете написать что-то вроде:
let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController
В этом случае вы установите свое приложение в исходное состояние.
Ответ 3
Если у вас есть контроллер навигации, от вашего контроллера используйте:
self.navigationController?.popToRootViewControllerAnimated(true)
Ответ 4
попробуйте
self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
Это вернет вас к началу потока приложений.
Ответ 5
Я рекомендую вам сделать segue от одного ViewController к другому, вместо того, чтобы нажимать на ваш ViewController.
Итак, сначала вам нужно Ctrl + clic с вашего первого ViewController на ваш ViewController входа, а затем в инспекторе атрибутов вы получите идентификатор.
Затем все, что вам нужно сделать, это следующее:
self.performSegueWithIdentifier("yourIdentifier", sender: self)
Теперь, для панели навигации, я предлагаю вам удалить контроллер навигации из окна входа и связать его с вашим первым представлением. Он удалит навигационную панель из окна входа в систему.