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

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

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

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

0回答

1005閲覧

TodoListの作成:IndexPathで配列の上書き

Gingami09

総合スコア1

TableView

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/18 12:56

編集2020/10/18 14:19

前提・実現したいこと

TodoListを作ろうと考えています。
cellの編集画面にあるtextfieldに文字を入力すると、もともと入力してあった文字が編集画面のtextfieldで上書きされ、文字が更新されているようにしたいです。

画面A 入力したcellを一覧できる画面
画面B cellの追加画面
画面C cellの編集画面

発生している問題・エラーメッセージ

画面Cにおいて、どのようにindexPathを使えば、タップしたcellの内容を上書きできるのかわかりません。
拙い文章ですみません。

エラーメッセージ

該当のソースコード

画面A import UIKit class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var todolistTable: UITableView! override func viewWillAppear(_ animated:Bool) { super.viewWillAppear(animated) if UserDefaults.standard.object(forKey: "todoList") != nil { todoItem = UserDefaults.standard.object(forKey: "todoList") as! [String] } todolistTable.reloadData() } override func viewDidLoad() { super.viewDidLoad() } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return todoItem.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cellValue = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell") cellValue .textLabel?.text = todoItem[indexPath.row] return cellValue } // cellの編集許可 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } // 追加:セルの削除機能 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == UITableViewCell.EditingStyle.delete { todoItem.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath as IndexPath], with: .automatic) UserDefaults.standard.set(todoItem , forKey: "todoList") todolistTable.reloadData() } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // セルの選択を解除 tableView.deselectRow(at: indexPath, animated: true) // 別の画面に遷移 performSegue(withIdentifier: "EditToDo", sender: nil) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) presentingViewController?.endAppearanceTransition() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) presentingViewController?.beginAppearanceTransition(true, animated: animated) presentingViewController?.endAppearanceTransition() } }
画面B import UIKit var todoItem = [String]() class AddToDo: UIViewController { @IBOutlet weak var itemText: UITextField! @IBAction func addItem(_ sender: AnyObject) { if itemText.text != "" { todoItem.append(itemText.text!) UserDefaults.standard.set(todoItem, forKey: "todoList") } dismiss(animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() } @IBAction func tapScreen(_ sender: UITapGestureRecognizer) {self.view.endEditing(true) } @IBAction func ReturnButton(_ sender: Any) { self.dismiss(animated: true, completion: nil) } override func viewWillAppear(_ animated: Bool) { presentingViewController?.beginAppearanceTransition(false, animated: animated) super.viewWillAppear(animated) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) presentingViewController?.endAppearanceTransition() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) presentingViewController?.beginAppearanceTransition(true, animated: animated) presentingViewController?.endAppearanceTransition() } }
画面C import UIKit class EditToDo: UIViewController { @IBOutlet weak var EditingTextField : UITextField! @IBAction func EditingButton(_ sender: AnyObject ){ if EditingTextField.text != "" { // todoItem.append(EditingTextField.text!) UserDefaults.standard.set(todoItem, forKey: "todoList") } dismiss(animated: true, completion: nil) } func Tableview(_ TableView : UITableView , cellForRowAt indexPath:IndexPath ) -> UITableViewCell { let celling = UITableViewCell() let edittextfield:Any = UITextField() let rowNumber = indexPath.row if rowNumber == todoItem.count { todoItem = edittextfield as! [String] } return celling } func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } // 戻るボタン @IBAction func EditReturnButton(_ sender: Any) { self.dismiss(animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() } // タップするとキーボードがなくなる @IBAction func tapScreen(_ sender: UITapGestureRecognizer) {self.view.endEditing(true) } // 無限モーダル解消 override func viewWillAppear(_ animated: Bool) { presentingViewController?.beginAppearanceTransition(false, animated: animated) super.viewWillAppear(animated) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) presentingViewController?.endAppearanceTransition() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) presentingViewController?.beginAppearanceTransition(true, animated: animated) presentingViewController?.endAppearanceTransition() } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

swift5.3
Xcode12.0

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

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

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

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

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

hameji001

2020/12/08 15:50

画面Aにおいて、選択したindexPath.rowを次の画面Cに渡す必要があると思います。 具体的には override func prepare(for segue: UIStoryboardSegue, sender: Any?) { } を用意して、画面CのVCに渡してください。 参照 https://qiita.com/treastrain/items/8c298886cc8f3cf124f2
Gingami09

2021/02/03 06:56

回答ありがとうございます!問題は解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問