2010-12-30 3 views
6

私は作成したタブバーコントローラのカスタムサブクラスの中にNavコントローラを持っています。誰かがタブバーを非表示にしたときに通知するタブバーイベントはありますか?

表示されたコントローラの1つがタブバーを非表示または表示しようとするたびに、(カスタム)タブバーから知りたいことがあります。 (例えば、hidesBottomBarWhenPushed = YESを持つVCをNacコントローラにプッシュする場合)。

要するに、タブバーを隠している/表示しているイベントの通知を受けたいが、Appleのリファレンスで何も見つかりませんでした。私はUITabBar、UITabBarDelegate、UITabBarController、およびUITabBarControllerDelegateを見てみましたが、すべてタブバー項目に関連する機能しか提供していないようです。

ありがとうございます。

答えて

0

サブクラスUINavigationController、hidesBottomBarWhenPushedの背後にあるsetterを実装するか、またはhidesBottomBarWhenPushedメソッドを直接サブクラス化するためにUIViewControllerをサブクラス化して、UITabBarにコールを委任します(ダイレクトコールまたはNSNotificationによって)。

+0

私はそれを持っているか分からない。 hidesBottomBarWhenPushedは、状態を表すプロパティです。このプロパティには、バーを隠す実際のコードは含まれていません(プロパティは通常、コントローラがnav vcスタックにプッシュされる前に設定されます)。 – nsof

9

タブバーコントローラを使用している場合、UIKitはタブバーコントローラのコンテキストに表示されるすべてのナビゲーションコントローラインスタンスがviewControllersプロパティの中にあることを明示しています。現在、UINavigationControllerの各インスタンスには、ビューコントローラがプッシュされたときを知らせるnavigationController:willShowViewController:animated:メソッドを定義するデリゲートがあります。

プッシュされているすべてのナビゲーションコントローラのデリゲートとしてタブバーコントローラを設定すると、プッシュされているビューコントローラにhidesBottomBarWhenPushedプロパティが設定されているかどうかを分析し、そのような場合にイベントを生成できます。

タブバーコントローラのタブバーを非表示にするアルゴリズムは、次のとおりです。タブコントローラに含まれるナビゲーションコントローラにビューコントローラがプッシュされているとき、ナビゲーションのナビゲーションスタック内のビューコントローラコントローラにhidesBottomBarWhenPushedプロパティが設定されている場合は、タブバーを非表示にする必要があります。

ナビゲーションコントローラが選択され、そのスタック内のビューコントローラの1つがhidesBottomBarWhenPushedプロパティセットを持つとき、タブバーは非表示になります。

+0

ナビゲーションコントローラーのデリゲートとしてタブバーコントローラーを設定する方法は?私はエラーが発生しています。私は 'self.navigationController?.delegate = self.tabBarController'を試しています。エラー - ' UITabBarController型の値を代入できません? 'UINavigationControllerDelegateとタイプするには? –

+0

' self.navigationController?.delegate = self.tabBarControllerを使ってエラーを解決しました! MyCustomTabBarViewController ' –

関連する問題