2017-02-04 2 views
0

У меня есть segue для контроллера представления, который отвечает за аутентификацию пользователя. Когда вход в систему подписан, я хочу вернуться к контроллеру родительского представления. Следуя руководству this, я создал segue от контроллера представления просмотра до его выхода. Когда я пытаюсь назвать это кодом, я ничего не делаю.Не удается выполнить segue для выхода

Вот мой код:

import UIKit 

import Firebase 
import FirebaseAuth 
import GoogleSignIn 

class AuthVC: UIViewController, GIDSignInUIDelegate { 

    @IBAction func unwindAuth(sender: UIStoryboardSegue) { 
     print("'unwindAuth' called") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     GIDSignIn.sharedInstance().uiDelegate = self 

     FIRAuth.auth()?.addStateDidChangeListener() { (auth, user) in 
      if FIRAuth.auth()?.currentUser != nil { 

       print(self.shouldPerformSegue(withIdentifier: "unwindSegue", sender: nil)) 

       self.performSegue(withIdentifier: "unwindAuthSegue", sender: nil) 

      } 
     } 
    } 
} 

После нажатия на кнопку Войти, я true в консоли от self.shouldPerformSegue, но ничего (нет ошибок и ничего не происходит).

Я использую Xcode Version 8.3 beta (8W109m).

Я искал решение для этого в течение нескольких дней.

Отказ от ответственности: Я новичок в Xcode, но я программировал почти 10 лет. Тем не менее, у меня нет формального обучения.

+2

Вы не читали очень внимательно:»..you указать фамилию размотки действия в контроллере представления вы хотите, чтобы segue расслабился ». Вы поместили его в контроллер просмотра, из которого вы отключаетесь. – Gruntcakes

+0

Спасибо за ответ. Есть ли способ сделать это наоборот? Я могу прослушивать запись с первого контроллера, но чтобы знать, что это было из контроллера представления auth, мне нужно было бы установить какую-то переменную состояния. Это не похоже на лучшую практику. Кроме того, почему я не получил ошибку вместо просто ничего? – Fallenalien22

+0

Похоже, вы хотите передать данные с 2-го контроллера вида на 1-й? Есть много прошлых вопросов о том, как это сделать, если вы посмотрите вокруг. – Gruntcakes

ответ

3

Действие размотки segue должно быть размещено на контроллере вида, на который вы хотите вернуться, а не на контроллер вида, который вы оставляете.

Если вы хотите передать данные обратно, то вы можете использовать делегат

Passing data back from view controllers Xcode

+0

Спасибо, кучка. Он работает сейчас. Все, что мне нужно было сделать, это разместить функцию @IBAction func в родительском контроллере. 'Self.performSegue' должен войти в контроллер дочернего представления, поскольку segue принадлежит к этому классу, поэтому мне даже не нужна ссылка. – Fallenalien22

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

  • Нет связанных вопросов^_^