2017-03-23 13 views
0

プログラムによって1つのビューコントローラから別のビューコントローラにユーザーを送信する際に問題が発生しています。彼は以下の流れに関連したコードを投稿しています。正しいコードが何であるかを私に知らせることに加えて(私は感謝します)、ロジック/デザイン自体がOKであれば興味があります。navigationControllerで黒い画面を表示する.pushViewController(Swift 3.0)

私はプログラムでUIを制御しています。ユーザーがアプリを開くとしたがって、私のアプリのデリゲートdidfinnishlaunchingwithoptionsに私は、彼らがSigninControllerに

window = UIWindow(frame: UIScreen.main.bounds) 
window?.makeKeyAndVisible() 
FIRApp.configure() 
window?.rootViewController = SigninController() 

リダイレクトされています。 その後、SigninControllerの中で、私はFirebaseに対してすべてのソーシャル認証を処理しています。その後、私は以下の使用、ログインとして、ユーザーが確認された場合、上記のコードでは

let provider: [FUIAuthProvider] = [FUIGoogleAuth(), FUIFacebookAuth()] 
     FUIAuth.defaultAuthUI()?.providers = provider 

     // listen for changes in the authorization state 
     _authHandle = FIRAuth.auth()?.addStateDidChangeListener { (auth: FIRAuth, user: FIRUser?) in 
      // check if there is a current user 
      if let activeUser = user { 

       // check if the current app user is the current FIRUser 
       if self.user != activeUser { 
        self.user = activeUser 
        self.signedInStatus(isSignedIn: true) 
        print("user session is active, redirecting...") 
        let nextViewController = CustomTabBarController() 
        self.navigationController?.pushViewController(nextViewController, animated: true) 

       } 
      } else { 
       // user must sign in 
       self.signedInStatus(isSignedIn: false) 
       self.loginSession() 
      } 

     } 

    } 

:私は、ユーザーがある(かない)、認証と一緒に彼を送信していることを確認するために私のコードでリスナーを持っていますそれらを一緒に送信するコード。これは私が問題を抱えているところです。今は黒い画面が表示されますが、エラーメッセージは表示されません。

let nextViewController = CustomTabBarController() 
self.navigationController?.pushViewController(nextViewController, animated: true) 

次に、CUstomTabBarControllerクラスのコードを示します。

class CustomTabBarController : UITabBarController 
{ 
override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let home = createNavController(imageName: "gen-home", rootViewController: HomeController(collectionViewLayout: UICollectionViewFlowLayout())) 
    let loc = createNavController(imageName: "loc-map-route", rootViewController: LocController(collectionViewLayout: UICollectionViewFlowLayout())) 
    let stats = createNavController(imageName: "pre-bar-chart", rootViewController: StatsController(collectionViewLayout: UICollectionViewFlowLayout())) 
    let profile = createNavController(imageName: "account", rootViewController: ProfileController(collectionViewLayout: UICollectionViewFlowLayout())) 

    viewControllers = [home, loc, stats, profile] 

    } 

    private func createNavController(imageName: String, rootViewController: UIViewController) -> UINavigationController 
    { 
     let navController = UINavigationController(rootViewController: rootViewController) 
      navController.tabBarItem.image = UIImage(named: imageName) 

     return navController 
    } 

} 

は、私は愚かな何かを見下ろすのですが、時にはそれはそれを指摘して、目の別のペアを取ると確信しています。

ありがとうございます。ここで

+0

すべてのView Controllerをプログラムで作成していますか?あなたのコード内のストーリーボードやXIBファイルは参照していません。 – redent84

+0

こんにちは。はい、それは正しいです。ストーリーボードやXIBファイルはまったくありません。 –

+0

'self.navigationController'が' nil'ではないと確信していますか? 'SigninController'は埋め込まれていないようです。それが 'nil'の場合は、' SigninController() 'を' UINavigationController(rootViewController:SigninController()) ' – redent84

答えて

1

self.navigationController?.pushViewController(nextViewController, animated: true) 

navigationControllerはありません。

let rootViewController = SigninController() 
let navController: UINavigationController = UINavigationController(rootViewController: rootViewController) 
FIRApp.configure() 
self.window?.rootViewController = navController 
self.window?.makeKeyAndVisible() 

それはそれを可視化する前windowrootViewControllerを割り当てることが良いでしょう:あなたのAppDelegateあなたがこれを行うために必要で

。それ以外の場合は、画面が点滅することがあります。

+0

ありがとうございます。私は今それを試みます。 UINavigationControllerを設定しているCustomTabBarControllerでどのように動作するのだろうかと思います。 –

+0

@CodeSherpaよろしくお願いします。問題はないはずです。あなたは2つの 'UINavigationController'を持っています。基本的には、特別な場合にのみ気にする必要はありません。 –

+0

ありがとうございました。私は今、ビューを見ることができます、ありがとう!しかし、あなたが気にしなければ、関連する問題があるようです。何が起こっているのかは、黒いビューがまだそこにありますが、1秒間だけです。そして、適切なコントローラ(この場合はcustomtabbarcontrollerのhomeviewcontroller)にリダイレクトされます。しかし、戻るボタンがあり、ユーザーは黒い画面に戻ることができます。私は黒い画面を完全にスキップして、私のhomeviewcontrollerを親ビューにしたいと思います。あなたは何が起こっているのか考えていますか? –

関連する問題