プログラムによって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
}
}
は、私は愚かな何かを見下ろすのですが、時にはそれはそれを指摘して、目の別のペアを取ると確信しています。
ありがとうございます。ここで
すべてのView Controllerをプログラムで作成していますか?あなたのコード内のストーリーボードやXIBファイルは参照していません。 – redent84
こんにちは。はい、それは正しいです。ストーリーボードやXIBファイルはまったくありません。 –
'self.navigationController'が' nil'ではないと確信していますか? 'SigninController'は埋め込まれていないようです。それが 'nil'の場合は、' SigninController() 'を' UINavigationController(rootViewController:SigninController()) ' – redent84