2016-09-03 8 views
0

Instagramと同様に、NSUserDefaultをチェックして既にログインしている場合、私のアプリはTabbar VCをルートVCとして表示します。私たちはLoginVCからsegue'dされていることを示す画面VCコードが表示されていない状態でVCを削除する

if LOGIN_SCREEN_SHOWN == true { 
      self.dismissViewControllerAnimated(true, completion: nil) 

     } else { 
      let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginVC") as! LoginVC 
      self.presentViewController(loginVC, animated: true) { 
       //self.removeFromParentViewController() 
       self.tabBarController!.removeFromParentViewController() 
       let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
       appDelegate.window?.rootViewController = loginVC 
       LOGIN_SCREEN_SHOWN = true 
      } 
     } 

flow

基本的LOGIN_SCREEN_SHOWNがLoginVCにviewWillAppearでtrueに設定されている

にログインするために戻ってログアウトを扱う次のコードを持っています。

私は全てのVCでプリントアウトしたdeInitコードを持っています。私は何を見つけるの午前はLOGINSCREENSHOWNは== TRUE、dismissViewControllerAnimatedは私が何をしたいのかやってしかし

NavVC Deinit Successfully 
NavVC Deinit Successfully 
NavVC Deinit Successfully 
NavVC Deinit Successfully 

VC1 Deinit Successfully 
VC2 Deinit Successfully 
VC3 Deinit Successfully 
VC4 Deinit Successfully 

、私が提示する「他」の下のコードをプリントアウトし、すべての私のVCですべてdeInitコードを呼び出している場合ということですLoginVCが提示された後にVCをログインしてVCを削除しようとしても、コードが私がしたいことをしていないことを示す印が出ません。誰かが正しい方向

---- UPDATE ----

これはKetan Parmarから働く最終的なコードであるに私を指すしてくださいでした。私はあなたのユーザーが(userdefaultsまたは何でも)に記録されない最初のチェックのようなappdeledateなものでこれを管理しなければならないdismissViewControllerAnimatedアニメーション

 if LOGIN_SCREEN_SHOWN == true { 
      self.dismissViewControllerAnimated(true, completion: nil) 

     } else { 
      // Custom transition 
      let transition : CATransition = CATransition() 
      transition.duration = 0.35 
      transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut) 
      transition.type = kCATransitionReveal 
      transition.subtype = kCATransitionFromBottom 

      let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginVC") as! LoginVC 
      let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.window?.layer.addAnimation(transition, forKey: nil) 
      appDelegate.window?.rootViewController = loginVC 
      LOGIN_SCREEN_SHOWN = true 
     } 
+0

あなたはself.dismissViewControllerAnimated(真、完了:ゼロ)を実装している方法では? –

+0

もう少しよく似たクエリ:http://stackoverflow.com/questions/39159444/how-to-get-navigation-based-template-functionality-in-swift-programming/39159793#39159793 –

+0

dissmissViewControllerAnimatedはVC4でlogoutBtnで実装されています – user172902

答えて

1

を模倣するトランジションの種類と期間を変更しましたか?はいの場合は、に最初のviewcontrollerとしてtabBarVCを設定しているため何もしないでください。さて、それが表示されない場合は、loginViewControllerを表示し、次にloginViewControllerをインスタンス化し、それをウィンドウのrootviewcontrollerとして設定します。正常にログインした後、tabbarVCをsegueで表示するか、instantiateで表示します。それじゃない。

更新:

let loginVC = self.storyboard?.instantiateViewControllerWithIdentifier("LoginVC") as! LoginVC 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.window?.rootViewController = loginVC 

多くのコードだけrootVCとしてloginVCを設定することが必要であること。

アップデート2:

アニメーションのrootVCを設定する前に、コードスニペットの下に追加し、

let transition : CATransition = CATransition() 
    transition.duration = 0.2 
    transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut) 
    transition.type = kCATransitionPush 
    transition.subtype = kCATransitionFromLeft 
    (UIApplication.sharedApplication().delegate as! AppDelegate).window?.layer.addAnimation(transition, forKey: nil) 
+0

これは私がすでにやっていることとほぼ同じです。しかし、上記の質問は、ユーザーがrootVCとしてtabBarVCを持っていて、ログアウトしたいのでloginVCに戻ろうとしている場合、setVCをrootVCとしてもう一度呼び出すと、コードは既存のVCに – user172902

+0

を割り当てません。 !! – Lion

+0

私のコードを見て、あなたに例を挙げてください。あなたが私の他のセクションで見ることができるように、私はrootvcとしてloginvcを設定しようとしましたが、それは動作しませんでした。乾杯! – user172902

関連する問題