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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Q&A

0回答

1441閲覧

tableViewのデータ反映

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

0グッド

0クリップ

投稿2017/06/05 02:14

編集2022/01/12 10:55

やりたいこと
alertで入力したデータとは別に毎回固定出でくるcellを一緒に追加時に表示されるようにしたい

*イメージ図
イメージ説明
エラー内容
イメージ説明
イメージ説明

やったこと/試してみたこと
+をタップするとアラートが表示されそこで入力した内容をcellに表示出来るようにした
それと固定出でくる「add cell」についてはいろいろ考えてみたが分からなかった
個人的にはvar people = Personを書き換えれば「add cell」が固定で表示出来ると思って何度か自分なりに考えてやってみたのですがどうしても出来なっかたの「add cell」が固定で表示出来るようにやり方を教えていただきたいです。

swift

1import UIKit 2import CoreData 3 4class ViewController: UIViewController, UITableViewDataSource { 5 6 @IBOutlet weak var tableView: UITableView! 7 8 9 var people = [Person]() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 15 title = "\"The List\"" 16 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") 17 } 18 19 20 21 func tableView(_ tableVeiw: UITableView, numberOfRowsInSection section: Int) -> Int { 22 return people.count + 1 23 } 24 25 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 26 if indexPath.row < people.count { 27 // 各personのセル 28 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 29 30 let person = people[indexPath.row] 31 32 cell!.textLabel!.text = person.value(forKey: "name") as? String 33 34 35 return cell! 36 } else { 37 cell!.textLabel.text = "add cell" 38 39 return cell 40 // FIXME:追加ボタンのセルを初期化してreturnする 41 } 42 } 43 44 45 46 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 47 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 48 49 if editingStyle == .delete{ 50 //self.tableView.setEditing(true, animated: true) 51 52 context.delete(people[indexPath.row]) 53 54 (UIApplication.shared.delegate as! AppDelegate).saveContext() 55 56 do { 57 people = try context.fetch(Person.fetchRequest()) 58 }catch let error as NSError { 59 print("Could not save \(error), \(error.userInfo)") 60 } 61 tableView.reloadData() 62 } 63 } 64 65 @IBAction func addName(_ sender: Any) { 66 let alert = UIAlertController(title: "New name", message: "Enter a new name", preferredStyle: .alert) 67 68 let saveAction = UIAlertAction(title: "Save", style: .default) { (action) in 69 let textField = alert.textFields?.first 70 self.saveName(name: textField!.text!) 71 self.tableView.reloadData() 72 } 73 74 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 75 76 alert.addTextField(configurationHandler: nil) 77 alert.addAction(saveAction) 78 alert.addAction(cancelAction) 79 80 present(alert, animated: true, completion: nil) 81 } 82 83 func saveName(name: String){ 84 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 85 86 let person = Person(entity: Person.entity(), insertInto: context) 87 88 person.setValue(name, forKey: "name") 89 90 do{ 91 try context.save() 92 people.append(person) 93 } catch let error as NSError { 94 print("Could not save \(error), \(error.userInfo)") 95 } 96 } 97 98 99 @IBAction func add cell(_ sender: Any) { 100 let alert = UIAlertController(title: "New name", message: "Enter a new name", preferredStyle: .alert) 101 102 let saveAction = UIAlertAction(title: "Save", style: .default) { (action) in 103 let textField = alert.textFields?.first 104 self.saveName(name: textField!.text!) 105 self.tableView.reloadData() 106 } 107 108 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 109 110 alert.addTextField(configurationHandler: nil) 111 alert.addAction(saveAction) 112 alert.addAction(cancelAction) 113 114 present(alert, animated: true, completion: nil) 115 } 116 117 func save cell(name: String){ 118 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 119 120 let person = Person(entity: Person.entity(), insertInto: context) 121 122 person.setValue(name, forKey: "name") 123 124 do{ 125 try context.save() 126 people.append(person) 127 } catch let error as NSError { 128 print("Could not save \(error), \(error.userInfo)") 129 } 130 } 131 132 override func viewWillAppear(_ animated: Bool) { 133 super.viewWillAppear(animated) 134 135 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 136 137 do{ 138 let result = try context.fetch(Person.fetchRequest()) 139 people = result as! [Person] 140 }catch let error as NSError { 141 print("Could not save \(error), \(error.userInfo)") 142 } 143 } 144 145 override func didReceiveMemoryWarning() { 146 super.didReceiveMemoryWarning() 147 } 148 149} 150 151

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問