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

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

新規登録して質問してみよう
ただいま回答率
85.35%
保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

0回答

1009閲覧

入力内容をlabelに反映させて保存したいです。

smawe

総合スコア0

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/09/05 04:11

編集2021/09/05 04:22

swift

1 2import UIKit 3import SwiftUI 4import Firebase 5 6class EditorViewController: UIViewController, UIColorPickerViewControllerDelegate, UITextFieldDelegate{ 7 8 @IBOutlet weak var textField: UITextField! 9 @IBOutlet weak var sav: UIButton! 10 @IBOutlet weak var tln: UITextField! 11 @IBOutlet weak var tfn: UITextField! 12 @IBOutlet weak var room: UITextField! 13 @IBOutlet weak var tani: UITextField! 14 @IBOutlet weak var save: UIButton! 15 @IBOutlet weak var re: UITextField! 16 @IBOutlet weak var tyu: UITextField! 17 @IBOutlet weak var shu: UITextField! 18 @IBOutlet weak var hi: UITextField! 19 var targetLabel: UILabel! 20 21 func getTextfield(view: UIView) -> [UITextField] { 22 23 var results = [UITextField]() 24 for subview in view.subviews as [UIView] { 25 if let textField = subview as? UITextField { 26 results += [textField] 27 } else { 28 results += getTextfield(view: subview) 29 } 30 } 31 return results 32 } 33 34 override func viewDidLayoutSubviews() { 35 super.viewDidLayoutSubviews() 36 37 let allTextFields = getTextfield(view: self.view) 38 for textField in allTextFields 39 { 40 textField.font = UIFont.boldSystemFont(ofSize: 20) 41 var widthOfText: CGFloat = textField.text!.size(withAttributes: [NSAttributedString.Key.font: textField.font!]).width 42 var widthOfFrame: CGFloat = textField.frame.size.width 43 while (widthOfFrame - 15) < widthOfText { // try here to find the value that fits your needs 44 let fontSize: CGFloat = textField.font!.pointSize 45 textField.font = textField.font?.withSize(CGFloat(fontSize - 0.5)) 46 widthOfText = (textField.text?.size(withAttributes: [NSAttributedString.Key.font: textField.font!]).width)! 47 widthOfFrame = textField.frame.size.width 48 } 49 } 50 } 51 52 override func viewDidLoad() { 53 super.viewDidLoad() 54 55 let userDefaults = UserDefaults.standard 56 userDefaults.string(forKey: "tlnl") 57 58 let defaults = UserDefaults.standard 59 let value = defaults.string(forKey: "tln") 60 tln.text = value 61 let valu = defaults.string(forKey: "textField") 62 textField.text = valu 63 let val = defaults.string(forKey: "tfn") 64 tfn.text = val 65 let va = defaults.string(forKey: "room") 66 room.text = va 67 68 save.layer.cornerRadius = 25 69 save.layer.borderWidth = 1 70 save.layer.borderColor = UIColor.lightGray.cgColor 71 72 self.title = self.targetLabel.text 73 74 let button = UIButton(frame: CGRect(x: 0, y: 0, width: 300, height: 44)) 75 self.view.addSubview(button) 76 button.translatesAutoresizingMaskIntoConstraints = false 77 button.heightAnchor.constraint(equalToConstant: 44).isActive = true 78 button.widthAnchor.constraint(equalToConstant: 130).isActive = true 79 80 button.topAnchor.constraint(equalTo: tyu.bottomAnchor, constant: 20.0).isActive = true 81 button.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -45).isActive = true 82 button.setTitleColor(UIColor.black, for: .normal) 83 button.layer.cornerRadius = 22 84 button.layer.borderWidth = 1 85 button.layer.borderColor = UIColor.lightGray.cgColor 86 button.setTitle("カラー選択", for: .normal) 87 button.center = view.center 88 button.addTarget(self, action: #selector(didTapSelectColor), for: .touchUpInside) 89 } 90 91 @objc private func didTapSelectColor() { 92 let colorPickerVC = UIColorPickerViewController() 93 colorPickerVC.delegate = self 94 present(colorPickerVC, animated: true) 95 96 } 97 98 func colorPickerViewControllerDidFinish(_ EditorViewController: UIColorPickerViewController) { 99 let color = EditorViewController.selectedColor 100 view.backgroundColor = color 101 } 102 103 @IBAction func back(_ sender: Any) { 104 self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 105 } 106 @IBAction func didTapApplyButton(_ sender: Any) { 107 108 let writtenText = tln.text! as String 109 let writtenTex = textField.text! as String 110 let writtenTe = tfn.text! as String 111 let writtenT = room.text! as String 112 113 if let tln = self.tln.text { 114 if let tfn = self.tfn.text { 115 if let room = self.room.text { 116 if let textField = self.textField.text { 117 self.targetLabel.text = textField + "\n" + tln + " " + tfn + "\n" + room 118 let defaults = UserDefaults.standard 119 defaults.set(writtenText, forKey: "tln") 120 defaults.set(writtenTex, forKey: "textField") 121 defaults.set(writtenTe, forKey: "tfn") 122 defaults.set(writtenT, forKey: "room") 123 124 view.endEditing(true) 125 } 126 } 127 } 128 129 } 130 131 132 133 self.navigationController?.popViewController(animated: true) 134 self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 135 } 136} 137 138```### 前提・実現したいこと 139 140ここに質問の内容を詳しく書いてください。 141 142初学者初投稿失礼いたします。 143 144現在時間割を入力できるようなアプリをswiftで作成しています。 14540こ程度のlabelを画面に貼り、ユーザーがタップした箇所のlabelを判断して項目の入力画面へ遷移、そこで入力した内容をlabelへ反映させるという方法で作成してまいりました。また、保存ボタンのタップでuser defaultによりデバイス内に保存できるような形式にしようとしました。 146しかしながら、label反映されたlabelの内容がアプリを落とすと消えてしまいます。そもそもデータの保存ができていないのでは?と思いましたが、項目入力画面に遷移させたところ項目は既に入力された状態で遷移先の画面が表示されます。 147また、label1をタップして項目を入力。次にlabel2をタップして項目を入力しようとすると画面遷移後の入力画面の項目にlabel1で入力した内容が入った状態で画面が表示されます。 148そのためlabel1の内容はlabel1にのみ反映、保存をさせ、次にlabel1をタップした際にはlabel1の内容が表示れるようにし、label2をタップした際にはlabel2の内容がしっかりと表示されるように保存させたいです。 149 150 151伝わりにくい文章で申し訳ないのですが、独学のため周りに頼れる人もおらず、ネットで検索してもヒットしないため力を貸していただけると幸いです。

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

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

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

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

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

smawe

2021/09/05 04:23

失礼いたしました。ご丁寧にありがとうございます! 正しくできているかわかりませんが、コード載せました。見づらくて申し訳ないです。
hoshi-takanori

2021/09/05 06:03

EditorViewController は時間割のマスをタップした時に呼ばれる入力画面で、時間割のタップした箇所の label が targetLabel ということでしょうか。なるほど、その発想はなかったです…。 まず、時間割全体のデータをどうやって保存するかを考える必要がありますね。とりあえず UserDefaults で頑張ることも可能ではありますが、データ構造をちゃんと考える必要があるでしょうね。 ところで、import Firebase してますが、データをクラウドに保存する予定でしょうか?
smawe

2021/09/05 06:16

返信ありがとうございます。初心者が分からずひたすらに打ち込んだコードですので簡易化・簡略化できる方法がありましたらそちらでも結構です! 最初はfirebaseに保存した方がいいかと思ったのですが、テキストのみでデータ量も大きいものではないと判断してローカル保存に切り替えようと思っておりました。なのでimport Firebaseは消し忘れです。申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問