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

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

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

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

Q&A

解決済

2回答

421閲覧

UIButtonでランダムの場所に出力した複数のUILabelをUserDefaultsに保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2019/02/13 02:21

編集2019/02/13 03:22

あらかじめグローバル変数で宣言した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

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

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

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

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

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

fuzzball

2019/02/13 02:26

「UILabelを保存」というのは何を意味しているのでしょう? 言葉で説明できないのであれば「UILabelをuserDefaultsに保存することは実現できました」のコードを書いてください。
fuzzball

2019/02/13 02:39

一つ出来ているのなら複数でも同じように出来ると思うのですが、どの辺が分からないのかもう少し具体的に書いてください。
退会済みユーザー

退会済みユーザー

2019/02/13 03:27

要は、actionCreateUIButtonで複数出力したUILabelのプロパティを保存したいです。
fuzzball

2019/02/13 03:32

11:39にも返信願います。
退会済みユーザー

退会済みユーザー

2019/02/13 04:02

```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に代入できない。というところでどうしたものか、と悩んでいます。
guest

回答2

0

ベストアンサー

何が解らないのかが微妙ですが・・・

しかしこれではローカル定数なのでuserDefaultsに代入できない。というところでどうしたものか

ランダムに生成した時点でメンバ変数(配列)にラベルを取っておく
もしくは、
保存時のタイミングでview.subviewsで子ビューを全部取り出し、
必要なもの(型を調べるなり、tagにマーキングしておくなり)だけを保存する

で行けると思います。

投稿2019/02/13 04:55

takabosoft

総合スコア8356

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

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

退会済みユーザー

退会済みユーザー

2019/02/13 04:59

なるほど。一旦配列にいれておくと良さげですね。やってみます。ありがとうございます。
fuzzball

2019/02/13 05:24 編集

この回答/コメントを見て、質問者が何が分からないのかが分かりました。
退会済みユーザー

退会済みユーザー

2019/02/13 09:00

ありがとうございました。無事解決することができました。 fuzzballさま。初心者故、質問の仕方が伝わりにくく、失礼しました。 今後は伝わりやすい質問ができるよう、気をつけたいと思います。
guest

0

質問への追記・修正の依頼より

これらのUILabelの位置をuserDefaultsで保存し

保存してください。

また立ち上げたときにこれらのUILabelを呼び出したい

呼び出してください。

ローカル定数なのでuserDefaultsに代入できない

出来るでしょう?

投稿2019/02/13 04:11

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問