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

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

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

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

Q&A

解決済

1回答

1019閲覧

(Swift)UITabBarControllerのdidSelectメソッドが使えない

niship

総合スコア37

Swift

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

0グッド

2クリップ

投稿2017/10/21 01:44

いつもお世話になっております。

SwiftにてTabBarを実装するために、CocoaPodsでライブラリを読み込んで、
ちょっとお洒落なTabBarにしようとしています。

TabBarを実装するのは初めてで、使い方がわからず、
ライブラリの使い方も難しくて四苦八苦しているのですが、

各TabBarItemの選択時を検知したいので、didSelectメソッドを使いたいのですが、
UITabBarControllerに関連付けをしているクラス内にdidSelectメソッドを記載しても、
メソッドが呼ばれません。

記載する場所が間違っているのでしょうか?
原因等、ご教示頂けますと幸いです。

使用しているライブラリ
RAMAnimatedTabBarController

didSelectメソッド記載箇所コード

//RAMAnimatedTabBarController.swift /// UITabBarController with item animations class RAMAnimatedTabBarController: UITabBarController { fileprivate var didInit: Bool = false fileprivate var didLoadView: Bool = false // MARK: life circle override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { print("おーい") } //以下省略

その他、不足情報等ございましたら、ご指摘ください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

###追記(重要)
2017/11/30
fuzzballさんによってdidselectに関するプルリクエストが行われ、即座にマージまでされました。なので今後アップデートされたバージョンによってはdidselectは通常通り機能すると思われます。fuzzballさんありがとうございました。

###以下これまで通り

これdidSelectが機能しませんね。まさかの展開。せっかくなので実際に動かしてみました。

環境
swift 4.0
Xcode 9.0.1
RAMAnimatedTabBarController ~> 2.2

構成としてはRAMAnimatedTabBarController配下に二つのViewControllerがあります。それぞれFirstViewController、SecondViewControllerと名前をつけます。

MyTabBarController.swiftを作成します。
didSelectではなくtapHandlerをoverrideしていきます。

swift

1import UIKit 2import RAMAnimatedTabBarController 3 4class MyTabBarController: RAMAnimatedTabBarController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 // Do any additional setup after loading the view. 10 } 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 // Dispose of any resources that can be recreated. 15 } 16 17 override func tapHandler(_ gesture: UIGestureRecognizer) { 18 super.tapHandler(gesture) 19 print(selectedIndex) //print 0 if you tap tabBarItem of FirstViewController 20 } 21}

んでMyTabBarControllerをStoryBoardに用意したTabBarControllerのCustomClassにすると。
今回は動作確認済みです。
場合分けはselectedIndexでやってく感じになりそうですね。

投稿2017/10/21 10:16

編集2017/12/02 05:12
xAxis

総合スコア1349

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

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

niship

2017/10/21 11:23

xAxis様、ご回答有難うございます。 新しい.swiftファイルを作成し、その中にMyTabBarControllerクラスを作り、StoryBoardのUITabBarControllerのカスタムクラスに設定しましたが、シミュレーターでTabBarItemの切り替えを行っても、didSelectメソッドは呼ばれず、コンソールに"Hey"も表示されませんでした。
xAxis

2017/10/21 12:24

回答を修正しました。
niship

2017/10/21 12:31

xAxis様 上記の回答内容で実現したかった内容を完璧に再現できました。 誠に有難うございました。 didSelectが機能しないようになっていたのですね。。。
退会済みユーザー

退会済みユーザー

2017/11/29 15:35

xAxis様 これぞまさしく探していたものでした。ありがとうございます。私はよくSNSのタイムラインでみかけるようなスクロールの発火にこのイベントを利用したいと考えています。teratailで別の質問を投稿させていただきましたので、よろしければアドバイスをいただければと思います。何卒よろしくお願いいたします。https://teratail.com/questions/102617
fuzzball

2017/11/30 06:22

RAMAnimatedTabBarControllerの不具合のような気がするのでプルリクエストを投げてみました。どうなることやら‥。
fuzzball

2017/11/30 06:39

マージされたようなのでupdateすれば didSelect が呼ばれるようになります。対応早いw
xAxis

2017/11/30 14:17

本家githubを見てみたんですけどものすっごい対応早かったですねw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問