質問: raw2.title return cell } } ``` のような感じで、表示を変更しています。 どうすれば、Tagで分類したテーブルを二つともリロードできるのでしょうか。 ご教授いだたけたらと思います。 よろしくお願いします。 ### 補足情報(言語/FW/ツール等のバージョンなど) Xcode 7.3 Swift 2
回答: > > tableView.reloadData()をしても、画面内のひとつのテーブルしか > > リロードされず、いきづまっています。 > > > `tableView.reloadData()`だけだと、`tableView`という名前のプロパティのテーブルを更新するよう指示しているだけですから、ひとつのテーブルしかリロードされません。 > > どうすれば、Tagで分類したテーブルを二つともリロードできるのでしょうか。 > > > tagで分類したそれぞれのテーブルを`viewWithTag()`で取得してから、それに対して`reloadData()`すればいいです。 (サンプルコード) ``` for i in 0...1 { let tableView = self.view.viewWithTag(i) as! UITableView tableView.reloadData() } ``` ただ、tagの初期値は0で、全てのビューのtagには初期値として0が与えられていますから、 self.viewのtagが0のままなら、self.view.viewWithTag(0)は、self.view自身を 取得してしまいますから、うまく動作しません。 tagを使って処理するなら、各テーブルのtagは1以上の番号を付与し、viewWithTagで 探す番号は「1...2」とすることをお勧めします。 (参考) そもそも固定のテーブルビューをストーリーボードで2つ定義しているだけなら、tagを使わず それぞれのテーブルビューをアウトレット接続してプロパティで参照できるようにして、 そのプロパティを見てそれぞれのテーブルを処理することを私としてはお勧めします。 (アウトレット接続) ``` @IBOutlet weak var tableView1: UITableView! @IBOutlet weak var tableView2: UITableView! ``` (リロード処理) ``` tableView1.reloadData() tableView2.reloadData() ``` (テーブル表示処理) ``` func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if tableView == tableView1 { return (テーブル1の行数) } else { return (テーブル2の行数) } } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) { if tableView == tableView1 { (テーブル1のセルの処理) } else { (テーブル2のセルの処理) } } ```