前提・実現したいこと
swift初心者です。ToDoリストアプリを作ろうと思い、Realmを用い制作を行っています。
アプリの大まかな構成としては、
1.一覧画面が表示される
2.一覧画面の上部にテキストビューを配置し、画面遷移無しで一覧にリストを追加できる
3.追加されたリストをタップで、詳細画面に遷移する
4.詳細画面でテキストの読み上げを行うことができる ←ここはまだ未実装
です。
上記、3までを作成したのですが、詳細画面に遷移してもタップしたセルの情報が表示されず、どうすればいいのかわかりません。
ToDoアプリ系でRealmを用いたサンプルプログラムを真似して作成しているので、あまりわかっていない部分も多いと思います。
下記にコードを記載いたしますので、どなたかご教示をいただけますと助かります。
よろしくお願いいたします。
ViewContoroller.swift
import UIKit import RealmSwift class ViewController: UIViewController, UITextViewDelegate { var result: String? @IBOutlet weak var inputTextView: UITextView! @IBOutlet weak var tableView: UITableView! var itemList: Results<TodoRealm>! override func viewDidLoad() { super.viewDidLoad() let realmValue1 = try! Realm() self.itemList = realmValue1.objects(TodoRealm.self) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) } @IBAction func tapAddButton(_ sender: Any) { let todoValue: TodoRealm = TodoRealm() todoValue.cellItem = self.inputTextView.text let realmValue2 = try! Realm() if inputTextView.text.isEmpty == false { try! realmValue2.write { realmValue2.add(todoValue) } } self.tableView.reloadData() inputTextView.endEditing(true) inputTextView.text = "" } } extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.itemList.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "todoCell", for: indexPath) let item: TodoRealm = self.itemList[(indexPath as NSIndexPath).row]; cell.textLabel?.text = item.cellItem cell.textLabel?.numberOfLines = 0 return cell } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { deleteTodo(at: indexPath.row) tableView.reloadData() } } func deleteTodo(at index: Int) { let realm = try! Realm() try! realm.write { realm.delete(itemList[index]) } } func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { performSegue(withIdentifier: "goToDetal", sender: indexPath) } override func prepare(for segue : UIStoryboardSegue, sender: Any?){ if (segue.identifier == "goToDetail") { let detailView: DetailViewController = (segue.destination as? DetailViewController)! detailView.received = result! } } }
DetailViewContoroller.swift
import UIKit import RealmSwift class DetailViewController: UIViewController { var received: String? @IBOutlet weak var outputLabel: UILabel! @IBAction func tapCloseButton(_ sender: Any) { dismiss(animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() outputLabel.text = received } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
TodoRealm.swift
import Foundation import RealmSwift class TodoRealm: Object { @objc dynamic var cellItem: String? = nil }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/04 10:44
2019/06/04 11:18
2019/06/04 12:06
2019/06/04 12:41
2019/06/06 11:33