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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

4285閲覧

swift ViewController呼び出し後、App delegateから再起動する方法

seastar

総合スコア62

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/05/02 00:01

iOSアプリを作っています。
ログイン機能を設け、ログイン状態を変更したときにアプリを再起動させたいのですがうまくできず、解決できないため知恵をお貸しいただけますでしょうか。

下記のコードを書いていましたが、ViewDidLoadから再起するとその前に宣言しているボタンが無効状態になり、操作が効かなくなりました。

そのため、ViewController自体を再起させたいのですが、Appdelegateからやり直す方法、立ち上げ直す方法がわかりませんでした。

swift

1 @IBAction func tapLogin(_ sender: Any) { 2 if ログアウト状態だったら 3 { 4 サインイン処理実行 5 } 6 else 7 { 8 サインアウト処理実行 9 } 10     self.loadView() 11 self.viewDidLoad() 12 }

上記、viewDidLoad()の部分を、アプリを再起動するコードに書き換えたいです。
また、アプリ再起動せずとも、ViewControllerクラスをリセットして実行し直す方法があれば、教えていただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

tomato879241

2021/05/02 00:30

iOSではアプリの再起動とかアプリの強制終了はしませんけど? 「viewDidLoad()の部分を、アプリを再起動するコードに書き換えたいです。」 そもそもviewDidLoad()の役割をご存知ですか?
seastar

2021/05/02 00:42

それが出来るかできないかを調べても分からないため、もし出来るなら教えて頂きたいという趣旨の質問です。 以前質問したマップビューでもそうですが、質問をよく読んでいただけますでしょうか。煽ったような回答されるようなので、私の質問には回答しないで頂きたく、よろしくお願いします。
hoshi-takanori

2021/05/02 06:42

viewDidLoad は自分で呼ぶものではありません。普通はログイン画面とログイン後の画面を別々の ViewController にします。それらを切り替える方法はいろいろ考えられますが、SceneDelegate の rootViewController を切り替えるとかでしょうか。 https://qiita.com/rkamiya/items/1dccaadef01299816e3c
seastar

2021/05/02 16:55 編集

hoshi-takanori様 返信が遅くなり申し訳ありません。実装に時間がかかりました。 SceneDelegateでログイン判定、ViewControllerでログイン、ログアウトの画面わけをすることで解決することができました。 いざ実装できれば簡単でしたが、1つのviewで動的に切り分けることに固執しており困っていたため、新たな解決方法を提示いただき勉強になりました。 いつも大変感謝しています。ありがとうございます。
guest

回答2

0

viewDidLoadを呼び出して何をしたいかによりますが、例えばモーダルであれば、dismissで閉じつつ、ノータイムでもう一回ViewControllerを呼び出すなど色々やりようはある気もします。
それがアプリ上いい動きかどうかはともかくですが。。

viewDidLoadの再読み込みはあくまで手段かと思うのですが、再起動しないといけない部分をカスタムクラス化して、再度読み込むなどの検討をした方がいいように思いました。

投稿2021/05/02 14:51

Piyosuke

総合スコア57

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

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

seastar

2021/05/02 16:54

Piyosuke様、回答ありがとうございます。 SceneDelegateでログイン状態を判定し、ログインとログアウトでViewControllerを分けることで解決させて頂きました。 1つのViewControllerで解決できそうな手法の提案ありがとうございます。後学のために勉強させて頂きます。 またよろしくお願いいたします。
guest

0

自己解決

hoshi-takanori様のコメントにて解決しました。

質問内容では、1つのViewControllerの中でログイン状態とログアウト状態を判別し、動的に画面生成しようとしていましたが、アプリを起動する際に呼ばれるSceneDelegateでログイン状態を判定し、判定した結果によってログイン、ログアウトのViewControllerを用意することで解決することができました。

上のコメントにもありますが、同じ参考リンクを添付させて頂きます。
https://qiita.com/rkamiya/items/1dccaadef01299816e3c

投稿2021/05/02 17:02

seastar

総合スコア62

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問