質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2429閲覧

初回起動画面とメイン画面の切替について

tom0708

総合スコア7

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

2クリップ

投稿2020/01/27 02:45

現在、個人アプリ開発をしており、ユーザーの登録情報を入力する画面とメイン画面をTabBarで実装しています。

初心者のため、理屈なども理解できておらず詰まってしまいました。
画面構成は下記画像のような形です。
初回起動時は、画像上段のViewを表示し、それ以降と情報入力がされていたら、TabBar画面に遷移するという実装がしたいです。
AppDelegateを介してwindowのrootViewControllerを切り替える方法などを調べて試して見たのですが、上手くいきません。
アドバイスお願い致します。
イメージ説明

下記関係コード

swift

1import UIKit 2 3@UIApplicationMain 4class AppDelegate: UIResponder, UIApplicationDelegate { 5 6 var window: UIWindow? 7 8 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 9 10 let babyName:String? = "Username" 11 12 //ユーザーがいない場合は登録画面に遷移 13 if (babyName == nil){ 14 //windowを生成 15 self.window = UIWindow(frame: UIScreen.main.bounds) 16 //Storyboardを指定 17 let storyboard = UIStoryboard(name: "Main", bundle: nil) 18 //Viewcontrollerを指定 19 let initialViewController = storyboard.instantiateViewController(withIdentifier: "StartVC") 20 //rootViewControllerに入れる 21 self.window?.rootViewController = initialViewController 22 //表示 23 self.window?.makeKeyAndVisible() 24 }else{ 25 //ユーザーがいる場合Storyboardでチェックの入っているIs Initial View Controllerに遷移する 26 } 27 28 return true 29 } 30

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

よくやるのは、最初の画面よりもさらに前に何も無いか起動時のスプラッシュスクリーンと同じ見た目の画面を用意して、そいつをInitial View Controllerにし、そのViewControllerのviewDidAppearでユーザー登録済みかどうかを判定、登録画面かメイン画面を選択してperformSegueで手動で遷移します。
追加した最初の画面から登録/メイン画面への遷移のアニメーションを無しにしておくといいですよ。

投稿2020/01/27 03:46

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tom0708

2020/01/27 14:39 編集

ありがとうございます! アドバイスの通り実施しましたが、上手く遷移してくれません。 下記コードに間違いはありますでしょうか。 ''' override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if UserDefaults.standard.string(forKey: "Name") == nil{ performSegue(withIdentifier: "login", sender: nil) }else{ performSegue(withIdentifier: "tabBarController", sender: nil) } } '''
toki_td

2020/01/27 14:43

特に問題ないように思いますが、どううまくいきませんか?何も起こらない? StoryboardではちゃんとSegueが繋がっていてコードにあるのと同じIdentifierが設定されているでしょうか?
tom0708

2020/01/28 03:22

遷移自体は今現在上手くいきましたが、ビルドした際に、LaunchScreen.storyboardで設定しているviewが表示されてしまいます。 GeneralのMainInterfaceの設定もMain.storyboardで設定しているのですが、間がられる原因はなんでしょうか。
tom0708

2020/01/28 03:32

上手くいきました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問