2016-12-20 12 views
0

私はFirebaseを使ってミニソーシャルメディアを作成しようとしています。現在のところ、ログインと登録を処理するloginRegisterViewControllerとメインコンテンツを提示するTabbarViewcontrolerの2つのコンポーネントがあります。 appDelegateのdidFinishLaunching方法においてプログラムでloginViewControllerを管理するにはどうすればよいですか?

、私はrootViewコントローラ

let rootviewController = TabbarController() 
window?.rootViewController = rootviewController 

とTabbarControllerのviewDidLoadメソッドで、iはLoginViewControllerが提示かなければならないかどうかを確認するために、次のコードを実装するようTabbarViewcontrolerを設定。ユーザーがいない場合

class TabbarController: UITabBarController { 

var handle : FIRAuthStateDidChangeListenerHandle? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    view.backgroundColor = .white 
    // check if the user is logged in or not. 
    handle = FIRAuth.auth()!.addStateDidChangeListener(){ auth, user in 
     if user == nil { 
      self.present(loginRegisterViewController(), animated: true, completion: nil) 
     }else{ 
      self.setupTabbarController() 
     } 
    } 

    } 
} 

ユーザーがログインしている場合は、私たちのセットアップtabbarViewControllerは、我々はtabbarViewControllerの上にloginRegisterViewControllerを提示します。

ただし、新しいユーザーを登録してloginRegisterViewControllerを閉じるたびに、空のtabbarViewControllerが表示されます。

これは、tabbarViewControllerのviewDidLoadメソッドのif-else条件のために発生することがわかりました。

最初にログインしたユーザがいないので、私は新しいユーザーを登録してloginRegisterViewControllerを解任した後

self.setupTabbarController() 

方法は、このように、そのため...と呼ばれていない、私は空のtabbarViewControllerを取得します。

しかし、これを解決するにはどうすればよいですか?または、ユーザーがログインしているかどうか、またはmainContentViewControllerまたはLoginRegisterViewControllerを表示しないかどうかを確認する良い方法がありますか?

ありがとうございます。

編集:setupTabbarViewControllerが設定する機能ですtabbarController

func setupTabbarController(){ 

    let shopControler = ViewController() 
    let shopNavigationControler = UINavigationController(rootViewController: shopControler) 
    shopNavigationControler.tabBarItem.title = "Shop" 
    shopNavigationControler.tabBarItem.image = UIImage(named: "Shop_Tabbar_Image") 

    viewControllers = [newsfeedNavigationControler, shopNavigationControler] 
} 
+0

setupTabBarController関数の外観はどうなっていますか? – JustinM

+0

@ JustinM、tabbarControlelrを設定する典型的な方法ですが、主な問題は呼び出されないということです。私はすでに投稿に含まれています。 – progammingBeignner

+0

元の質問を編集して、コードを正しくフォーマットしてください。その長さのコードは、コメントでは簡単には読めません。 – JustinM

答えて

0

あなたは正しく述べたように、我々は、ログイン状態が変化した後、再びself.setupTabbarController()を呼び出す必要があります。

私は通常、実装のこの種で行く:

は、クラスAuthManagerまたはそのような何かを作成します。これには、ユーザーloginStateと、configureRootViewControllerという関数があります。 静的なsharedInstanceを宣言します。 AppDelegateで

からdidFinishLaunchWithOptions: あなたの呼び出しは嘘はこの何かになります。 AuthManager.sharedInstance.configureRootViewController()

すべてのことconfigureRootViewController()は、それがログイン状態をチェックし、正しいrootViewControllerを構成しています。

ログイン状態が変わるたびに、このメソッドを再度呼び出すとします。

私は助けて欲しい。正確な答えを出すのはかなり早いです。 :-) 素晴らしい一日を過ごしましょう。

+0

ありがとうございます!私は後でそれが動作するかどうかを確認するためにそれを試してみる... – progammingBeignner

+0

こんにちは@florianthompson ...私はこれを実装する方法について少し明確にすることが可能ですか?あまりIOSに堪能ではありません..おかげで束! – progammingBeignner

関連する問題