###前提・実現したいこと
ここ一ヶ月弱ほど、Swiftの勉強をしていて、SwiftとXcodeでログイン・ログアウト機能を実装したiOSアプリを作成しています。
今回質問させていただくのは、ログイン・ログアウト機能の実装についてです。
ログインログアウト機能自体はFirebase Authを使用して実装することはできました。
問題は、タイムラインを表示する前にログイン判定をして、ログインしていなかったらログイン画面に遷移させているのですが、そのログイン画面からログインしてタイムラインに遷移すると、タイムラインで本来実装しているはずのNavigation ControllerやTabbar Controllerが消えてしまいます。
これはおそらく一度呼び出してしまったため、再度呼び出すことができていないのだと理解しています。
今回の質問ではそもそも、ログイン画面を作成する際にどこでどのように判定してどのように遷移すればタイムラインのようなメイン画面でNavigationControllerなどが表示されるのかを知りたいです。
おすすめの方法を共有していただければと思います。
一応ちんぷんかんぷんなことをしているかもしれませんが、わからないなりに試してみたことを下記に記させていただきます。
###試したこと
まず試したのは、タイムラインのクラスファイルのviewDidLoadやviewWillAppear内でログイン判定するのではなく、AppDelegateのdidFinishLaunchingWithOptions内で判定してみました。
これは下記リンクページを参考にさせていただきました。
https://qiita.com/KIKUMA/items/8254ff209890393c708b
この判定でログインログアウトを判定し、ログインしていたらタイムラインに、していなかったらログイン画面に遷移することはできました。
しかしやはり、この呼び出し方を使用してもログインしてタイムラインに遷移するとnavigation類は表示されません。
swift
1 //ユーザーがいない場合ログイン画面に遷移 2 if UserDefaults.standard.object(forKey: "check") == nil{ 3 //windowを生成 4 self.window = UIWindow(frame: UIScreen.main.bounds) 5 //Storyboardを指定 6 let storyboard = UIStoryboard(name: "Main", bundle: nil) 7 //Viewcontrollerを指定 8 let initialViewController = storyboard.instantiateViewController(withIdentifier: "login") 9 //rootViewControllerに入れる 10 self.window?.rootViewController = initialViewController 11 //表示 12 self.window?.makeKeyAndVisible() 13 }else{ 14 //ユーザーがいる場合Storyboardでチェックの入っているIs Initial View Controllerに遷移する 15 }
###試したこと
次に試したのは下記動画で説明されていた方法です。
https://www.youtube.com/watch?v=uETyLoAaJVM
新しいクラスを作っているだけで、ほとんど先ほどのものと違わないのかなと思っています。
とにかくこれでも上手く実装することはできませんでした。
###試したこと
次に、問題は判定のタイミングではなくて、ログイン画面からの遷移の方法なのかもしれないと考え、インターネット上で見つけた遷移方法を色々試しました。
swift
1// ログイン成功した時 2UserDefaults.standard.set("checked", forKey: "check") 3let vc = ViewController() 4self.navigationController?.pushViewController(vc, animated: true) 5// これは何も起こらず(遷移もできませんでした)
swift
1// ログイン成功した時 2let storyboard: UIStoryboard = self.storyboard! 3let nextView = storyboard.instantiateViewController(withIdentifier: "timeline") 4present(nextView, animated: true, completion: nil) 5// 遷移はできましたがNavigation類は表示されませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
使用しているもの
・Swift4
・Xcode Version 9.0
・Firebase
・見た目の作成や大体の画面遷移はコードではなくStoryBoard上で行っています。
何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。