1文字でも入力してログインを押せば、次画面に遷移します。
逆に、textFieldになにも入力せずにログインを押せば、
「ユーザー名を入力してください」
とポップアップが出ます。
入力したユーザー名はUserDefaultsに保存しているので、
swift
1let ud = UserDefaults.standard 2 3//ユーザー名をUDに保存 4ud.set(textField.text, forKey: "userName") 5 6//画面遷移 7performSegue(withIdentifier: "goTimeLine", sender: nil)
次回以降のログインは省略されるようになっています。
↓
swift
1 override func viewWillAppear(_ animated: Bool) { 2 super.viewWillAppear(animated) 3 4 //もしユーザー名が保存されてるなら 5 if let username = UserDefaults.standard.object(forKey: "userName") { 6 performSegue(withIdentifier: "goTimeLine", sender: nil) 7 } 8 9 }
ですが、シミュレータと実機で何度も起動すると、ログイン画面は省略されずに、初回起動時と同じようにユーザー名を入力しないと進めません。
つまり、”次回以降のログイン画面は省略”が実装できていないのです。
forKeyは確認しましたし、viewWillAppearなので初回以降のログイン時に実行されるはずです。
どこが問題かご指摘いただきたいです。
swift
1import UIKit 2import EMAlertController 3 4class ViewController: UIViewController,UITextFieldDelegate { 5 6 7 @IBOutlet weak var textField: UITextField! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 if let username = UserDefaults.standard.object(forKey: "userName") { 13 performSegue(withIdentifier: "goTimeLine", sender: nil) 14 } 15 16 textField.delegate = self 17 18 } 19 20 override func viewWillAppear(_ animated: Bool) { 21 super.viewWillAppear(animated) 22 23 //もしユーザー名が保存されてるなら 24 if let username = UserDefaults.standard.object(forKey: "userName") { 25 performSegue(withIdentifier: "goTimeLine", sender: nil) 26 } 27 28 } 29 30 @IBAction func login(_ sender: Any) { 31 if textField.text != "" { 32 33 let ud = UserDefaults.standard 34 35 //ユーザー名をUDに保存 36 ud.set(textField.text, forKey: "userName") 37 38 //画面遷移 39 performSegue(withIdentifier: "goTimeLine", sender: nil) 40 41 } else { 42 43 //アラート 44 let alert = EMAlertController(title: "ユーザー名を入力してください", message: "") 45 //アクション 46 let action = EMAlertAction(title: "OK", style: .cancel) 47 //アラートにアクションを追加する 48 alert.addAction(action: action) 49 //アラートを表示 50 present(alert, animated: true, completion: nil) 51 52 } 53 } 54 55 //画面をタップするとキーボードが閉じる 56 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 57 textField.resignFirstResponder() 58 } 59 60 61} 62
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。