質問です。
シチュエーションをまとめると
Swift
①起動時の画面にあるstartButtonを押した際に UserDefaults.standard.integer(forKey: "setTimer") に値が入っているかをcheckTimerSetting()で調べる ②値が入っていなかった場合、テキストフィールドがついたアラートを呼び出す。 ③入力した値を先述のUserDefaultsにsetする
という流れを想定してます。
行き詰まってる点としては、③でsetする際に値が入らないことです。
直前のprint(firstSetTimer)では入力した値がコンソールに表示されることを確認しています。
いろんなサイトを調べたりしましたがラベルに反映させるような事例しかなく足踏み状態です。
よろしければご教授願えればと思います。
下記に実際に使用しているコードを添付しておきます。
Swift
import UIKit class TopViewController: UIViewController { @IBOutlet weak var appName: UILabel! @IBOutlet weak var brain: UIImageView! @IBOutlet weak var timerLabel: UILabel! let timer = UserDefaults.standard.integer(forKey: "setTimer") override func viewDidLoad() { super.viewDidLoad() //UserDefaults.standard.set(0, forKey: "setTimer") //リセット用 } @IBAction func startButton(_ sender: UIButton) { checkTimerSetting() } //タイマー設定がされているか確認する func checkTimerSetting() { if timer > 0 { //二回目以降 print("設定時間は\(timer)分です") self.performSegue(withIdentifier: "toHTML", sender: nil) } else { //初回アクセス print("時間未設定") //UserDefaults.standard.set(20, forKey: "setTimer") let alert = UIAlertController(title: "任意の値を入力してください", message: "", preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in if let firstSetTimer:Int = Int((alert.textFields?[0].text)!){ print(firstSetTimer) UserDefaults.standard.set(firstSetTimer, forKey: "setTimer") } } alert.addTextField { (textField) in textField.placeholder = "数字で入力してください" textField.keyboardType = .numberPad } alert.addAction(okAction) present(alert, animated: true, completion: nil) } } }
まだ回答がついていません
会員登録して回答してみよう