あらかじめグローバル変数で宣言したUILabelをuserDefaultsに保存することは実現できましたが、ではUIButtonでランダムの位置にaddSubViewで出力した複数のUILabelを保存するにはどうすればよいのでしょうか。そもそもuserDefaultsを使うことがふさわしくないのでしょうか。よろしくお願いいたします。
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var createUILabel: UIButton! // UILabelを出力するボタン 6 @IBOutlet weak var loadButton: UIButton! //ロードボタン 7 @IBOutlet weak var saveButton: UIButton! //セーブボタン 8 9 10 let save = UserDefaults.standard //userDefaults 11 12 13 override func viewDidLoad() { 14 15 super.viewDidLoad() 16 17 createUILabel.backgroundColor = UIColor.green 18 loadButton.backgroundColor = UIColor.blue 19 saveButton.backgroundColor = UIColor.red 20 21 } 22 23 //UILabelを出力する処理 24 @IBAction func actionCreateUIButton(_ sender: UIButton) { 25 26 let randX = Int(arc4random_uniform(300)) 27 let randY = Int(arc4random_uniform(300)) 28 29 let label = UILabel() 30 label.text = String("text") 31 label.sizeToFit() 32 label.center = CGPoint(x: randX, y: randY) 33 view.addSubview(label) 34 35 } 36 37 38 @IBAction func actionSaveButton(_ sender: UIButton) { 39 40 //ランダムで表示されたデータを保存したい 41 42 } 43 44 @IBAction func actionLoadButton(_ sender: UIButton) { 45 46 //保存したデータを出力したい 47 48 } 49 50 51} 52
UIlabelを保存というのは良くない表現でした。UIlabelのプロパティを保存するという意味でした。失礼しました。
以下、UILabelをuserDefaultsに保存することは実現できたコードです。
swift
1 2import UIKit 3 4class ViewController: UIViewController { 5 6 @IBOutlet weak var createButton: UIButton! //UILabelを出力するボタン 7 @IBOutlet weak var loadButton: UIButton! //ロードボタン 8 @IBOutlet weak var saveButton: UIButton! //セーブボタン 9 10 let save = UserDefaults.standard 11 12 let testLabel = UILabel() 13 14 override func viewDidLoad() { 15 16 super.viewDidLoad() 17 18 createButton.backgroundColor = UIColor.darkGray 19 loadButton.backgroundColor = UIColor.blue 20 saveButton.backgroundColor = UIColor.red 21 22 } 23 24 //UILabelを表示する処理 25 @IBAction func actionCreateButton(_ sender: UIButton) { 26 27 let randX = Int(arc4random_uniform(300)) 28 let randY = Int(arc4random_uniform(300)) 29 30 testLabel.text = String("テスト") 31 testLabel.sizeToFit() 32 testLabel.center = CGPoint(x: randX, y: randY) 33 34 view.addSubview(testLabel) 35 print(testLabel.frame.origin.x) 36 print(testLabel.frame.origin.y) 37 38 } 39 40 //UILabelのプロパティを保存する処理 41 @IBAction func actionSaveButton(_ sender: UIButton) { 42 43 save.set(testLabel.center.x, forKey: "hoge") 44 save.set(testLabel.center.y, forKey: "fuga") 45 save.set(testLabel.text, forKey: "piyo") 46 save.synchronize() 47 48 } 49 50 //UIlabelのプロパティを出力する処理 51 @IBAction func actionLoadButton(_ sender: UIButton) { 52 53 testLabel.center = CGPoint(x: save.integer(forKey: "hoge"), y: save.integer(forKey: "fuga")) 54 testLabel.text = save.object(forKey: "piyo") as? String 55 testLabel.sizeToFit() 56 view.addSubview(testLabel) 57 58 } 59} 60 61
「UILabelを保存」というのは何を意味しているのでしょう?
言葉で説明できないのであれば「UILabelをuserDefaultsに保存することは実現できました」のコードを書いてください。
一つ出来ているのなら複数でも同じように出来ると思うのですが、どの辺が分からないのかもう少し具体的に書いてください。
要は、actionCreateUIButtonで複数出力したUILabelのプロパティを保存したいです。
11:39にも返信願います。
```swift
//UILabelを出力する処理
@IBAction func actionCreateUIButton(_ sender: UIButton) {
let randX = Int(arc4random_uniform(300))
let randY = Int(arc4random_uniform(300))
let label = UILabel()
label.text = String("text")
label.sizeToFit()
label.center = CGPoint(x: randX, y: randY)
view.addSubview(label)
}
```
こうすればいくつもUILabelを作成できると思うのですが、これらのUILabelの位置をuserDefaultsで保存し、また立ち上げたときにこれらのUILabelを呼び出したい。しかしこれではローカル定数なのでuserDefaultsに代入できない。というところでどうしたものか、と悩んでいます。
回答2件
あなたの回答
tips
プレビュー