前提・実現したいこと
swiftです。やりたいこととしては、TextFieldから数字を入力するとその数字が足されて、Labelに合計値が表示され、取り消しbuttonを押すと、直前に入力された数字を削除するというものです。
どのようなコードを付け足せばいいのでしょうか。教えていただければ幸いです。
写真の左側がViewController,右側がaddViewControllerです。
add
ViewController import UIKit class addViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() } // ViewControllerを開く度に中の処理が呼ばれる override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // UserDefaultsに保存された数字が無いか確認する if let _ = UserDefaults.standard.object(forKey: "textKey") as? String { // UserDefaultsに保存されたaTextの値をlabelに表示する label.text = (UserDefaults.standard.object(forKey: "textKey") as! String) //アプリ再起動後もaddViewControllerで引き続き計算出来るように、labelに表示されている値をUserDefaultsにtext2Keyとして保存する。 UserDefaults.standard.set(Int(label.text!), forKey: "text2Key") } } @IBAction func torikesi(_ sender: Any) { UserDefaults.standard.removeObject(forKey: "textKey") } }
ViewController import UIKit // 初期値を0に設定した変数aTextを作成 var aText:Int = 0 class ViewController: UIViewController { @IBOutlet weak var label: UILabel! @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let rgba = UIColor(red: 50/255.0, green: 150/255.0, blue: 1.0, alpha: 1.0)//rgbaを定義 label.backgroundColor = rgba // 背景色 label.textColor = UIColor.white // 文字色 label.layer.cornerRadius = 10.0 // 角丸のサイズ label.clipsToBounds = true // labelの時は必須(角丸) label.layer.borderWidth = 0.0 // 枠線の幅(0なので表示なし) label.layer.borderColor = UIColor.white.cgColor // 枠線の色 // addViewControllerを開く度にViewControllerのviewDidAppearでUserDefaultsで保存したlabelの値がある場合は、aTextに反映させてaddButton内で引き続き計算出来る様にする。 if let _ = UserDefaults.standard.object(forKey: "text2Key") as? Int { aText = (UserDefaults.standard.object(forKey: "text2Key") as! Int) } } @IBAction func addButton(_ sender: Any) { // iBにtextFieldに入力された数字を入れる guard let iB = Int(textField.text!) else { return } // aTextにiBの数字を入れて、aTextに入れる。 aText = aText + iB // UserDefaultsにaTextの値をtextKeyで保存する UserDefaults.standard.set(String(aText), forKey: "textKey") } }
試したこと
削除はできているけどLabelに表示できていないだけかと思ったので、
UserDefaults.standard.removeObject(forKey: "textKey")の後に
if let _ = UserDefaults.standard.object(forKey: "textKey") as? String {
label.text = (UserDefaults.standard.object(forKey: "textKey") as! String)
UserDefaults.standard.set(Int(label.text!), forKey: "text2Key")
というコードを付け足してみましたがダメでした。
###追記
直前に入力された値を削除する際にuserdefaultsを削除するのではなく、引き算を使うように修正しました。
//ViewController import UIKit class addViewController: UIViewController { @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() } // ViewControllerを開く度に中の処理が呼ばれる override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // UserDefaultsに保存された数字が無いか確認する if let _ = UserDefaults.standard.object(forKey: "textKey") as? String { // UserDefaultsに保存されたaTextの値をlabelに表示する label.text = (UserDefaults.standard.object(forKey: "textKey") as! String) //アプリ再起動後もaddViewControllerで引き続き計算出来るように、labelに表示されている値をUserDefaultsにtext2Keyとして保存する。 UserDefaults.standard.set(Int(label.text!), forKey: "text2Key") } } @IBAction func torikesi(_ sender: Any) { guard let iB = Int(textField.text!) else { return } // aTextにiBの数字を入れて、aTextに入れる。 aText = aText - iB // UserDefaultsにaTextの値をtextKeyで保存する UserDefaults.standard.set(String(aText), forKey: "textKey") } }
###エラー
「guard let iB = Int(textField.text!) else {」のところで「Use of unresolved identifier 'textField'」というエラーが出ました。
回答1件
あなたの回答
tips
プレビュー