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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3368閲覧

ひとつのViewContorollerで、2つのテーブルを作成しましたが、画面内の一つのテーブルしかリロードできません。

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

1グッド

1クリップ

投稿2016/08/20 20:42

編集2016/08/20 20:43

###前提・実現したいこと
[Swift]ひとつのViewContorollerで、複数のテーブルを作成する方法を教えてください。

現在、上記のページを参考に、
ひとつのViewContoroller内に、2つのテーブルを作成し表示しています。

2つの配列を各々に表示し、セルをタップすると別々の動作ができるようになっていますが、
設定で変なことをしているからか、
tableView.reloadData()をしても、画面内のひとつのテーブルしか
リロードされず、いきづまっています。

###設定など
tableViewをストーリーボードでTag:1、Tag:2で分類し。

lang

1 2 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 3 4 if tableView.tag == 0 { 5 let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) 6 cell.textLabel?.text = raw1.title 7 return cell 8 } else 9 { 10 let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) 11 cell.textLabel?.text = raw2.title 12 return cell 13 } 14 }

のような感じで、表示を変更しています。

どうすれば、Tagで分類したテーブルを二つともリロードできるのでしょうか。
ご教授いだたけたらと思います。
よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
Xcode 7.3
Swift 2

ikuwow👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

tableView.reloadData()をしても、画面内のひとつのテーブルしか
リロードされず、いきづまっています。

tableView.reloadData()だけだと、tableViewという名前のプロパティのテーブルを更新するよう指示しているだけですから、ひとつのテーブルしかリロードされません。

どうすれば、Tagで分類したテーブルを二つともリロードできるのでしょうか。

tagで分類したそれぞれのテーブルをviewWithTag()で取得してから、それに対してreloadData()すればいいです。
(サンプルコード)

swift

1for i in 0...1 { 2 let tableView = self.view.viewWithTag(i) as! UITableView 3 tableView.reloadData() 4}

ただ、tagの初期値は0で、全てのビューのtagには初期値として0が与えられていますから、
self.viewのtagが0のままなら、self.view.viewWithTag(0)は、self.view自身を
取得してしまいますから、うまく動作しません。
tagを使って処理するなら、各テーブルのtagは1以上の番号を付与し、viewWithTagで
探す番号は「1...2」とすることをお勧めします。
(参考)
http://qiita.com/moshisora/items/51dce98e9835c9accb1c

そもそも固定のテーブルビューをストーリーボードで2つ定義しているだけなら、tagを使わず
それぞれのテーブルビューをアウトレット接続してプロパティで参照できるようにして、
そのプロパティを見てそれぞれのテーブルを処理することを私としてはお勧めします。


(アウトレット接続)

swift

1@IBOutlet weak var tableView1: UITableView! 2@IBOutlet weak var tableView2: UITableView!

(リロード処理)

swift

1tableView1.reloadData() 2tableView2.reloadData()

(テーブル表示処理)

swift

1func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 if tableView == tableView1 { 3 return (テーブル1の行数) 4 } else { 5 return (テーブル2の行数) 6 } 7} 8 9func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) { 10 if tableView == tableView1 { 11 (テーブル1のセルの処理) 12 } else { 13 (テーブル2のセルの処理) 14 } 15}

投稿2016/08/20 23:07

編集2016/08/20 23:12
TakeOne

総合スコア6299

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

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

退会済みユーザー

退会済みユーザー

2016/08/21 05:09

TakeOneさん、ありがとうございます! viewWithTagでReloadDataできることを確認したあと、 プロパティで参照できるように修正して、 プロパティでReloadDataできることを確認しました。 とてもきれいに動くようになりました! まさにviewWithTag(0)の落とし穴に落ちていましたし、 if tableView == tableView1 というのは、 教えてもらわないと、絶対自己解決できませんでした。 tableViewをviewWithTag()で取得する方法は、 いろいろなところで納得できないところがあったので、 これで安心して複数のTableViewを使用できます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問