2017-04-21 15 views
0

私はログイン状態をチェックする必要がある様々な他のビューコントローラによって呼び出されるログインビューコントローラを持っています。これは、viewWillAppear()関数でこれを行います。ログインビューコントローラには、押されたときにポップするcloseView()関数を持つナビゲーションバーがあります。Swift3プロトコルデリゲート関数が呼び出されなかった

この関数では、デリゲート関数を呼び出して、表示されているビューコントローラも閉じますが、そのコントローラは、表示されたらcheck auth関数を再度呼び出します。それを閉じるための私のデリゲート関数が呼び出されることはありません。私はこれを達成する方法はありますか?ユーザーがログインコントローラーの閉じるボタンを押してログインをキャンセルした場合は、そのプレゼンテーションビューコントローラーも閉じるようにします。

viewWillAppear()checkAuth()の呼び出しが、代理関数が呼び出される前にトリガーされるという問題があるようです。

ここに私のコードです。

class MyViewController: UIViewController, UserCancelledLoginDelegate { 

    var delegate : UserCancelledLoginDelegate? 

------- 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated)   
    callCheckAuth() //loads login controller if not logged in 
} 

------------- 

func shouldCloseView() { 

    if let navController = self.navigationController { 
     navController.popViewController(animated: true) 
    } 
} 
} 

---------- 

func callCheckAuth() { 

// a utility to check auth which works 

     if response?.statusCode == 200 { 
      // do stuff     
     } 
     else if response?.statusCode == 401 { 

      self.loadSignInView() 

}代わりに、私は、ビューコントローラとその親を閉じるために、このコードを使用することができ見つかったデリゲートを使用する


protocol UserCancelledLoginDelegate { 
    func shouldCloseView() 
} 


class LoginViewController: UIViewController { 

    var delegate : UserCancelledLoginDelegate? 

---------- 

func closeView() { 

    delegate?.shouldCloseView()   

    if let navController = self.navigationController { 
      navController.popViewController(animated: true) 
     } 
} 
+0

**デリゲートを**どこかに設定する必要があります。 – vadian

+0

このcallCheckAuthメソッドを追加 – KKRocks

+0

デリゲートをどこに設定するのですか?私は別の代理人が同じパターンを使用し、別の目的のために使用しています。 – markhorrocks

答えて

0

if let navController = self.navigationController, navController.viewControllers.count > 0 { 

     let viewController = navController.viewControllers[navController.viewControllers.count - 3] 

     navigationController!.popToViewController(viewController, animated: true) 

    } 
関連する問題