🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Xcode

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

Swift

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

Q&A

解決済

1回答

1120閲覧

Swift 一つのtableviewで複数のデータの表示切り替えを出来る様にしたい。

samson66

総合スコア35

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/01/13 02:33

やりたい事
以下のような一つのtableViewでUISegmentedControlを使って、「魚」を押したら"sakana"の配列に入っているデータのみを表示し、「野菜」を押したら"yasai"の配列に入ってるデータを表示し、また全てのデータを見たい時は「全て」を押すと元に戻るような切り替えをしたい。
イメージ説明

現況のコード

Swift5

1import UIKit 2 3class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { 4 5 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 6 return alllist.count 7 } 8 9 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 10 ///セルの構築 11 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 12 //セルのテキストラベルにindexPath.row番目の配列の要素を入れる 13 cell.textLabel?.text = alllist[indexPath.row] 14 //UITableViewCell型を返す 15 return cell 16 } 17 18 //表示する配列 19 var alllist = [String]() 20 var sakana = ["トビウオ","シャケ","マグロ"] 21 var kudamono = ["リンゴ","バナナ","メロン"] 22 var yasai = ["トマト","キュウリ","ブロッコリー"] 23 24 @IBOutlet weak var table: UITableView! 25 26 override func viewDidLoad() { 27 super.viewDidLoad() 28 // Do any additional setup after loading the view. 29 30 table.delegate = self 31 table.dataSource = self 32 33 alllist = sakana + kudamono + yasai 34 } 35}

わからない事・聞きたいこと
UITableviewの中身をUIButtonやUISegmentedControlで更新(切り替え)する方法が知りたいです。
特にどのようにUITableViewのnumberOfRowsInSection・cellForRowAtのcell.textLabel?.textの部分でデータをセットすれば良いのかが思い付きません。
アドバイスでも良いのでお待ちしてますm(_ _)m

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

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

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

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

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

hoshi-takanori

2021/01/13 02:43

var currentList: [String] を用意して、表示したいものをそれで切り替えるようにすればいいのでは。
samson66

2021/01/13 14:01

ありがとうございます! 無事に切り替えることが出来ました!
guest

回答1

0

ベストアンサー

segmentedControlをIBOutletで接続はできるでしょうか?
hoshi-takanoriさんのご助言を利用させていただいて書いてみました。
こちらで切替できるかと思います。

Swift

1func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 return currentList.count 3 } 4 5 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 6 ///セルの構築 7 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 8 //セルのテキストラベルにindexPath.row番目の配列の要素を入れる 9 cell.textLabel?.text = currentList[indexPath.row] 10 //UITableViewCell型を返す 11 return cell 12 } 13 14 //表示する配列 15 var alllist = [String]() 16 var sakana = ["トビウオ","シャケ","マグロ"] 17 var kudamono = ["リンゴ","バナナ","メロン"] 18 var yasai = ["トマト","キュウリ","ブロッコリー"] 19 20 @IBOutlet weak var table: UITableView! 21@IBOutlet segmentedControl: UISegmentedControl! 22var currentList: [String] { 23 switch segmentedControl.selectedSegmentIndex { 24 case 0: 25 return allList 26 case 1: 27 return sakana 28 case 2: 29 return kudamono 30 case 3: 31 return yasai 32 } 33} 34override func viewDidLoad() { 35 super.viewDidLoad() 36 // Do any additional setup after loading the view. 37 38 table.delegate = self 39 table.dataSource = self 40 41 alllist = sakana + kudamono + yasai 42 segmentedControl.addTarget(self, action: #selector(handleSegmentedControlSelected(_:)), for: .valueChanged) 43} 44 45@objc private func handleSegmentedControlSelected(_ sender: UISegmentedControl) { 46 table.reloadData() 47}

投稿2021/01/13 14:01

fathy

総合スコア254

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問