前回からの続きでiOSアプリ標準のメモ帳を作成していますが、今日はTextViewに記入したメモの内容をTableViewに一覧表示する方法を記入したいと思います。
全体の構成としてはこんな感じです。
UINavigationController
↓
MainTableViewController(UITableViewController)
↓
DetailViewController(UIViewController)
MainTableViewControllerがRoot画面となっており、TableviewのNameをtableとしてあります。また、DetailViewControllerのTextViewのNameにdetailTextViewと命名してあります。
画面遷移の方法は前回の記事を見ていただければ良いかと思いますので省略します。
今日はDetailViewControllerのTextViewに内容を記入したものを、MainTableViewControllerに戻る際に一時保存してテーブル一覧に表示させます。
動作としてはこんな感じです。
①TextViewにメモを記入します。
②メモボタンでMainTableViewController画面に戻ります。
③右下の新規作成でTextView画面で再度メモを入力すれば一覧に追加される。
ここからはコードを記載します。
まず、DetailViewControllerの内容になります。
前回から追加されているのはViewWillDisappear()になります。
メモボタンでMainTableViewController画面に戻る際に、DataSourceクラスにTextViewに入力した内容を保存します。
DataSourceクラスになります。
内部にListクラスを持っており、先ほどのSet()でパラメータで渡された文字列をListに保存しています。
もう一つ、フィールド変数として自分自身(DataSourceクラス)を保持していますが、
全体でデータ情報を管理するクラスとして一つだけ存在するようにコンストラクタをprivateにして初回時に一度だけインスタンスを生成するシングルトンクラスになるようにしてあります。
また、UITableViewSourceを継承しており、GetInstance()で自分自身を戻り値の型とすることで、UITableView.Source()にデータを代入してテーブルに表示できます。
最後に、MainTableViewControllerになります。
ViewWillAppear()で画面再度表示される際にDataSource.GetInstance()でデータをセットしてUITableView.ReloadData()でセルの内容を再描画しています。
ハマったポイントとして、
ViewWillAppear()で画面が再度呼ばれればデータも再描画されると思ったら、表示がされないためちょっとハマってしまいました。
再度セルに表示させるためにはUITableView.ReloadData()で再度読み込ませないとテーブルにデータが表示されないので注意が必要です。