実行したいこと
TableviewcellにtextFieldで出力した値を配列に入れTodoとして取り出しているのですが、アプリを閉じるとcellが消えてしまうのでUserDefaultsに保存したいのですがいまいちわかりません。
また,遷移先にtextViewを設け一言書けるようにもしたいのですが、こちらもcellの保存は第一にcellとは別で保存する必要があるともうのですがどうですか?
該当コード(ViewController)
Swift5
1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate { 4 5 6 @IBOutlet weak var textField: UITextField! 7 @IBOutlet weak var tableView: UITableView! 8 9 10 var textArray = [String]() 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view. 15 16 tableView.delegate = self 17 tableView.dataSource = self 18 textField.delegate = self 19 20 } 21 22 override func viewWillAppear(_ animated: Bool) { 23 super.viewWillAppear(animated) 24 25 navigationController?.isNavigationBarHidden = true 26 27 if UserDefaults.standard.object(forKey: "todo") != nil{ 28 29 textArray = UserDefaults.standard.object(forKey: "todo") as! [String] 30 } 31 32 } 33 34 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 35 36 return textArray.count 37 38 } 39 40 func numberOfSections(in tableView: UITableView) -> Int { 41 42 return 1 43 } 44 45 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 46 47 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 48 49 cell.selectionStyle = .none 50 cell.textLabel?.text = textArray[indexPath.row] 51 cell.imageView?.image = UIImage(named: "profile") 52 cell.textLabel?.textColor = .white 53 54 return cell 55 56 } 57 58 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 59 60 let nextVC = storyboard?.instantiateViewController(identifier: "next") as! NextViewController 61 62 nextVC.todoString = textArray[indexPath.row] 63 64 navigationController?.pushViewController(nextVC, animated: true) 65 66 } 67 68 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 69 70 return view.frame.size.height/7 71 72 } 73 74 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 75 76 textArray.append(textField.text!) 77 textField.resignFirstResponder() 78 textField.text = "" 79 tableView.reloadData() 80 81 return true 82 83 } 84} 85
該当コード(NextViewController)
Swift5
1import UIKit 2 3class NextViewController: UIViewController { 4 5 var todoString = String() 6 7 8 @IBOutlet weak var textView: UITextView! 9 @IBOutlet weak var Todolabel: UILabel! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 16 Todolabel.text = todoString 17 18 } 19 20 override func viewWillAppear(_ animated: Bool) { 21 super.viewWillAppear(animated) 22 23 navigationController?.isNavigationBarHidden = false 24 } 25} 26
補足
if UserDefaults.standard.object(forKey: "todo"と一応呼び出しているのですがうまくは実証されませんでした。保存元がtextArrayではないのでしょうか?また保存したものを取り出すと思うのですがどのようにすれば良いですか?
回答1件
あなたの回答
tips
プレビュー