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

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

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

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

Swift

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

Q&A

解決済

1回答

846閲覧

Swift TabBarControllerを用いた条件分岐

globalplus

総合スコア119

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/25 19:56

TabBarControllerを使って
もしTag1のタブがタップされたらlet list1 = ["りんご","オレンジ","ぶどう"]
をTableViewに表示、
Tab2がタップされたら let list2 = ["牛肉","豚肉","鶏肉"]
をTableViewに表示
という機能を実装したくif文を使って分岐はわかりますが
’もしTabがタップされたら’の部分の書き方がわかりません
教えてくだされば幸いです

import UIKit import AVKit import AVFoundation class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var TabBarController: UITabBar! let list1 = ["りんご", "オレンジ", "ぶどう"] let list2 = ["牛肉","豚肉","鶏肉"] override func viewDidLoad(){ super.viewDidLoad() } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if Tab1がタップされたら //ここがわかりません { return list1.count }else if Tab2がタップされたら{ //ここがわかりません return list2.count } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { <#code#> }

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

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

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

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

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

TsukubaDepot

2020/06/25 21:10

TabBarController は ViewController の切り替え(画面の切り替え)で使うことが主目的であって、今回のような目的には使えないと思います。 代わりにToolBarを画面下部に設置し、そこに配置したボタンを押すことでTableViewに表示する内容を変更することになるかと思いますが、いかがでしょうか。
globalplus

2020/06/26 02:08

それで良いかなと思うので、詳しく教えて頂きたいです。 ただ、segueで遷移させるとsegueが多くなってぐちゃぐちゃするのを防ぎたいです。 なので遷移させずに表示内容だけを変更したいです。
TsukubaDepot

2020/06/26 06:31

segueを使う必要はなく、ToolBarに配置したBarButtonItemをタップされた時の処理を追加し、その中でリストを変更すれば良いだけとなります。 回答にサンプルをおきますので、それを参照していただけますでしょうか。
guest

回答1

0

ベストアンサー

TabBarよりもToolBarの方がいいかもしれない、という話になったので...

Swift

1 if Tab1がタップされたら //ここがわかりません 2 { 3 return list1.count 4 }else if Tab2がタップされたら{ //ここがわかりません 5 return list2.count 6 }

このように作るよりも、

Swift

1 @IBAction func fruitButton(_ sender: UIBarButtonItem) { 2 selectedList = list1 3 tableView.reloadData() 4 }

のような感じでボタンを押されたときに配列を代入し、

Swift

1 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 return selectedList.count 3 }

な感じでtableViewの行数を変えるのが良いかもしれません。

ただし、先の話になりますが、表示したリストから任意の要素を削除したいとなった場合には、少し異なった管理方法が必要になりますが、いまはとりあえずこれで良いかと思います。

他の方法としては、表示するリストを二次元配列にし、表示させたいリストの要素番号を保持する変数を使う方法もあると思います(し、もしかしたら最終的には管理が楽になる可能性もあります)。

Swift

1import UIKit 2 3class ViewController: UIViewController, UITableViewDataSource { 4 @IBOutlet weak var tableView: UITableView! 5 let list1 = ["りんご", "オレンジ", "ぶどう"] 6 let list2 = ["牛肉","豚肉","鶏肉"] 7 8 // MARK: 選択されたリスト 9 var selectedList = [String]() { 10 // プロパティオブザーバを使い、プロパティに変化が起きた場合は tableView.reloadData() を実行する 11 didSet { 12 tableView.reloadData() 13 } 14 } 15 16 override func viewDidLoad(){ 17 super.viewDidLoad() 18 19 // MARK: 最初のリストは list1 にする 20 selectedList = list1 21 22 tableView.dataSource = self 23 } 24 25 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 26 return selectedList.count 27 } 28 29 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 30 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 31 32 cell.textLabel?.text = selectedList[indexPath.row] 33 34 return cell 35 } 36 37 // MARK: BarButtonItem と関連づけられた処理 38 @IBAction func fruitButton(_ sender: UIBarButtonItem) { 39 // 果物ボタンが押されたら、選択されたリストを果物リストにする 40 selectedList = list1 41 // selectedList に値が入った瞬間に tableView.reloadData() が実行されるので、自分で行う必要はない 42 //tableView.reloadData() 43 } 44 45 // MARK: BarButtonItem と関連づけられた処理 46 @IBAction func meatButton(_ sender: UIBarButtonItem) { 47 // お肉ボタンが押されたら、選択されたリストをお肉リストにする 48 selectedList = list2 49 // selectedList に値が入った瞬間に tableView.reloadData() が実行されるので、自分で行う必要はない 50 //tableView.reloadData() 51 } 52}

StoryBoardへのUIToolbarの配置については、以下のスクリーンショットをご参照ください。

イメージ説明

UIToolbar の配置方法については、下記のリンクが参考になるかと思います。古い記事ですが、配置方法についてはさほど変わっていないかと思います。

投稿2020/06/26 06:42

TsukubaDepot

総合スコア5086

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

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

globalplus

2020/06/26 18:57

出来ました! こんなにシンプルに実装出来るんですね!こんな発想は私には出来ないので助かりました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問