[Swift] UITabBarControllerでタブ選択時のイベントを取得する
公開日:
:
最終更新日:2015/08/12
iPhone App 開発, Swift
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
UITabBarController
タブを使った画面を作成する場合はUITabBarControllerを使用します。
今回はそのタブ選択時のイベントを取得してみます。
新規プロジェクトから「Tabbed Application」テンプレートを選択します。
デフォルトでFirstViewControllerとSecondViewControllerがあります。
こちらの2つのViewControllerは、UITabBarControllerのviewControllersに内包されている状態です。
デリゲートの作成
手順としてはUITabControllerのサブクラスを作成し、そのクラスからタブ選択時に呼び出されるDelegateを作成し、各ViewControllerに委譲します。
まずはDelegate。
以下の内容で新規ファイルを作成します。ファイル名はTabBarDelegate.swiftとしました。
import Foundation @objc protocol TabBarDelegate { func didSelectTab(tabBarController: TabBarController) }
UITabBarControllerのサブクラス
次はUITabBarControllerのサブクラスを作成します。名前はTabBarController.swiftです。
import UIKit class TabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() self.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { if viewController is TabBarDelegate { let v = viewController as! TabBarDelegate v.didSelectTab(self) } } }
7行目で自分自身にデリゲートを設定します。
14行目はタブ選択時のデリゲート(UITabBarController)です。
どのViewControllerのタブが押されたのか引数で渡されてくるので、15行目でTabBarDelegateを実装しているか判断します。 17行目でViewControllerのデリゲートを呼び出します。(TabBarDelegate)
StoryBoardの設定
TabControllerを選択し、「Custom Class」のClassに先ほど作成した「TabBarController」を入力します。
各子画面の設定
最後に各ViewControllerで以下のようにDelegateを追加します。FirstViewController.swiftの内容です。
(SecondViewControllerjの内容は省きます。)
import UIKit class FirstViewController: UIViewController, TabBarDelegate { override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func didSelectTab(tabBarController: TabBarController) { println("first!") } }
3行目でTabBarDelegateを使うと宣言します。
13行目でTabBarDelegateのdidSelectTabが呼ばれます。
結果
まとめ
今回はタグ選択時のイベントを、個々のViewControllerでデリゲートとして受け取りました。
単純にViewController読み込み時に処理をしたい場合はviewWillAppearでもよいと思います。
ただ、viewWillAppearが発生するのはタブ切り替え時のみです。(同じタブを押下してもviewWillAppearは呼ばれません。)
ad
関連記事
-
[Swift] CoreDataを使ってみる
SwiftでCoreData 今回はSwiftでCoreDataを使ってみます。 Xcodeプロ
-
[iPhone App]WorkManager アップデートしました。
Processing For App Storeでやきもきした僕です。こんにちわ。 今
-
[Objective-C] 共通関数をまとめたクラスを作ろう!
共通クラスとは? アプリを作っていると「この処理何回も書いてるなー」ということが多々あると思います
-
[Objective-C] バージョン更新時に変更内容をアラートで出力する
アプリの更新内容を表示したい! バージョン更新時に変更内容を表示させたいのは、ユーザーがいちいちA
-
[Swift] optional値の設定(??)
optional値がnilの時 プロジェクトでのテンプレートを選択した時にソースコードが自動生成さ
-
[iPhone App] WorkManagerの不具合について
バージョン1.2.2の不具合 11/25日現在、iPhoneアプリの「WorkManger」バージ
-
[Swift] プロパティリスト(plist)を使ってCoreDataで一括登録する
プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト
Comment
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
めばえ より:
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
はじめまして。タブビューアプリを作成するにあたってGoogle検索にてこちらの記事を見つけました。
早速記載されている通りの記述を行ったのですが、どうもデリゲートしているはずなのに「viewController」がデリゲートではないと判断されてしまいます。
箇所で言うと「if viewController is TabBarDelegate {}」が実行されていない状態です。
storyboardの親TabControllerではカスタムしたクラスを選択しているので反応はしています。
この点で悩んでいますので、なにかご教授願えばと思います。よろしくお願いいたします。
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
north より:
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
コメントありがとうございます。お返事遅くなり申し訳ございません。
再度作成・実行してみましたが、上記の現象は再現しませんでした。
FirstViewController、SecondViewControllerにTabBarDelegateが実装されていますでしょうか?
(ソースコードの3行目にあたる部分です)
実装されていれば、インスタンスはTabBarDelegateだと認識し、if文が通ると思われます。
ご確認宜しくお願い致します。
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
チワワ より:
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
swift3で作成しています。
タブ選択時の処理を追加したくてこちらを参考にさせていただいています。
上記ソースを参照し作成したのですが、
(一部エラーになったため修正しています。)
タブを選択しても何もコンソールに表示されません。
修正した箇所はTabBarController.swiftの
17行目の
v.didSelectTab(self)
を
v.didSelectTab(tabBarController: self)に
変更しました。
またFirstViewControllerの
println(“first!”)をprint(“first!”)に
何故に出力されないのでしょうか?
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
UITabBarControllerを利用したてアクティブなタブが再度タップされたとき - swift3 uitabbarcontroller - 質問と回答 より:
Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
[…] こちらのサイトが参考になるかと思います。 […]