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

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

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

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

Xcode

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

Swift

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

Q&A

解決済

1回答

1413閲覧

[swift/iOS]UITabBarでタブの数を動的にセットしたい

entaro12345

総合スコア75

iOS

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/06/05 02:49

編集2020/06/05 06:01

前提・実現したいこと

swift言語でiOSアプリを実装しています。
タブ切り替えで表示するページを作成しているのですが、そのタブの数が動的です。
タブのセットについてはできるのですが、タブをタップした際のイベントを動的にする方法が
思いつかない状況です。
動的なタブに対してイベント処理をする良い方法をご教示いただけますと幸いです。

お手数おかけしますが、お力を貸してください。

追記:タブのセットについて誤っていたため修正しました。
追追記:APIの戻り値を格納する部分を追記しました。

該当のソースコード

swift

1import UIKit 2 3class ViewController: UIViewController, UITabBarDelegate { 4 5 var iWidthScreen:CGFloat = 0.0 6 var iHeightScreen:CGFloat = 0.0 7 8 var tabBar = UITabBar() 9 var arrTabItems:[UITabBarItem] = [] 10 var aData:[[Any]] = [] 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 // 画面サイズを取得する 16 iWidthScreen = self.view.frame.size.width 17 iHeightScreen = self.view.frame.size.height 18 19 // Tabの設置 20 tabBar = UITabBar() 21 tabBar.frame = CGRect(x: 0, y: 45, width: iWidthScreen, height: 30) 22 tabBar.barTintColor = UIColor.black 23 tabBar.unselectedItemTintColor = UIColor.gray 24 tabBar.tintColor = UIColor.red 25 26 // APIから情報取得 27 //self.aDataに情報を格納 28 29 // Tabの設定 30 // APIから取得した情報の数分、Tabを設置 31 for i in 0..<infos.count { 32 let tab:UITabBarItem = UITabBarItem(title: "", image: nil, tag: i) 33 arrTabItems.append(tab) 34 } 35 myTabBar.items = arrTabItems 36 myTabBar.delegate = self 37 38 self.view.addSubview(myTabBar) 39 } 40 41 // ↓↓ ここの実装方法に悩んでいます ↓↓ 42 func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 43 let data = self.aData[item.tag] 44 45 switch item.tag{ 46 case 1: 47 default : return 48 } 49 } 50}

補足情報(FW/ツールのバージョンなど)

MacOS HighSierra
Xcode 10.1
Swift 3.1

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/06/05 03:30

動的なタブに対してイベント処理をするというのは、タップされたものに対応する画面を表示するということでしょうか? 参考にされているページはありますか?あったら教えて下さい。
entaro12345

2020/06/05 04:02

コメントありがとうございます。 タップしたタブに関するデータ(APIで取得)を表示させたいです。 調べて見たのですが、マッチするページがないため、 今のところ、参考にしているページはありません。
thyda.eiqau

2020/06/05 05:39

// APIから取得した情報の数分、Tabを設置 このAPIは何を返してくるんでしょうか?そのタブでやるべきこと(タブ選択後の画面でアクセスすべきAPIのURLとか)がAPIからの戻り値に含まれている感じですかね?
entaro12345

2020/06/05 05:44

コメントありがとうございます。 APIが返してくるデータについては、タブの値とセットになったデータになります。 例)[ タブ名:データ]   [color:blue, red, green]、[animal:lion, panda]、[food:pizza, rice]のようなデータになります。
thyda.eiqau

2020/06/05 05:50

> タップしたタブに関するデータ(APIで取得)を表示 するためにはそのAPIのURLか何かを特定する必要があると思いますが、それは何らかの方法で特定しうるんですかね?
entaro12345

2020/06/05 06:04

説明不足で申し訳ございません。 追記しましたが、aDataという変数に対してAPIの戻り値を格納して タブタップ時にタブのtag値から情報を取得したデータを表示したいです。 と、思っていましたが、この返信を記述しているうちに特にswitch文にて判定する必要がないことに気づけました! ありがとうございます。
guest

回答1

0

自己解決

タブタップ時に、item.tag値で処理を分岐させようとしていましたが、
APIからの情報の格納先「aData」に格納する際にタブ順で格納することで
switch文で判定する必要がなくなりましたので、自己解決とさせていただきます。

ご協力いただきましたみなさまありがとうございました!

投稿2020/06/05 06:06

entaro12345

総合スコア75

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問