2012-03-03 16 views
2

カスタムTabBarコントローラクラスを使用してアプリケーションを取得しました。TabBarデリゲートメソッドを使用する

私は、タブバーコントローラのデリゲートメソッドを実装してみました:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"%i",tabBarController.selectedIndex); 
} 

をしかし、それは仕事をdoesntの。どうして? ViewDidLoad

私が書く:

self.tabBarController.delegate = self; 

と私が実装した.hで:

@interface BaseViewController : UITabBarController <UITabBarControllerDelegate> 
+0

実際にタブバーコントローラのデリゲートを設定しましたか? – yuji

+0

はい。私はviewdidloadでそれをやった –

+0

そして、あなたはあなたのクラスに 'UITabBarControllerDelegate'を実装するように設定しました。 – yuji

答えて

1

あなたはそれがあなたのカスタムTabBarControllerだと、述べています。あなたが行ったカスタマイズは何ですか?あなたがTabBarのパネルを変更して、手動で

setSelectedIndex: 
setSelectedViewController: 

の方法を使用するために、独自に置き換えた場合は、手動であまりにもデリゲートのメソッドを呼び出す必要があります。 Apple's documentationによると

タブ バーに発生する可能性があり、ユーザーによる変更の2つのタイプがあります。

  • は、ユーザーがタブを選択することができます。
  • ユーザーはタブを再配置できます。

両方のタイプの変更の はUITabBarControllerDelegateプロトコルに準拠 オブジェクトであるタブバーコントローラのデリゲートに報告されています。

UITabBarControllerDelegate Protocol Reference

IOSでV3.0を確認し、後で、タブバーコントローラは関係なく>選択されたビューコントローラが変化するかどうかのこのメソッドを呼び出します。さらに、タブバーのユーザタップに応答してのみ呼び出され、プログラムによってタブバーの内容が変更されたときに呼び出されることはありません。

委任は、ユーザーが、そのUITabBarコントロールと対話する場合にのみ応答します。カスタムTabBarControllerで

3

は、

self.tabBarController.delegate = self; 

を使用しかし、最寄りのタブバーコントローラであるビューコントローラ階層内の祖先が、あなたのカスタムTabBarControllerを返し.tabBarController

self.delegate = self; 

を使用していませんあなたがターゲットにしたいコントローラなので、その階層で検索する必要はありません

関連する問題