Подтвердить что ты не робот

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

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

let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)

Но в окне входа в систему отображается панель навигации вверху, чего она не должна делать, может быть, есть что-то другое, кроме self.navigationController!.pushViewController, которое я должен использовать?

4b9b3361

Ответ 1

SWIFT: Вы должны использовать разматывание.

  • Прежде всего, поставьте следующую строку в свой FirstViewController:

    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    
    }
    

    У функции на самом деле нет кода внутри.


  1. Теперь перейдите в свою раскадровку и создайте раскручивание для LogoutViewController путем перетаскивания с желтой кнопки на кнопку "Выход". Вот так:

управление-перетаскивание в действии

  1. Выберите разворот, созданный для FirstViewController.

  2. Измените идентификатор segue:

selected segue


изменение идентификатора segue

  1. Перейдите в код 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)

Теперь, для панели навигации, я предлагаю вам удалить контроллер навигации из окна входа и связать его с вашим первым представлением. Он удалит навигационную панель из окна входа в систему.