#目的
A: TitleTableViewController: UITableViewController
- データベースから値を読み込み表示する
B: AddSearchViewController: UIViewController
- データベースの値を書き換える
- StoryBoard ID: AddSearchView
AからBに転移して、BでAのテーブルの内容が変化する処理を行った後、BからAに戻っても、テーブルの内容が更新されないという問題があった。
それのような問題を解決する方法を紹介
#解決方法
まずAに、以下のコードを追加
import UIKit
protocol TitleTableViewControllerDelegate {
func updateTableView()
}
// TitleTableViewControllerDelegateを追加する時、updateTableView()が書かれていないので最初エラーが出ます
class TitleTableViewController: UITableViewController, TitleTableViewControllerDelegate {
// ...途中省略
// Bに転移する処理(実際はButtonをタップした時であった)
func toB() {
let addSearchViewController = self.storyboard?.instantiateViewControllerWithIdentifier("AddSearchView") as! AddSearchViewController
// まだ、Bに処理を書いていないので最初はエラーが出る
addSearchViewController.titleTableViewDelegate = self
self.presentViewController(addSearchViewController, animated: true, completion: nil)
}
func updateTableView() {
// 各セルの内容の要素を作る処理(今回は、データベースから値を読み込み配列に格納)
setUp()
// 再描画
self.tableView.reloadData()
}
func setUp() {
// データベースから値を読み込み配列に格納
// 処理省略
}
続いてBに追加
import UIKit
class AddSearchViewController: UIViewController {
var titleTableViewDelegate: TitleTableViewControllerDelegate!
// ...途中省略
// Aに転移する処理(実際はButtonをタップした時であった)
func toA() {
self.dismissViewControllerAnimated(true, completion: {
// ここを記述することでAのエラーが消える
self.titleTableViewDelegate.updateTableView()
})
}
これでBを閉じた時AのupdateTableView()の処理が行われる
正しいやり方かどうかわからないが...