6

我在我创建的 Tab Bar 控制器的自定义子类中有一个 Nav 控制器。

每当显示的控制器之一尝试隐藏或显示选项卡栏时,我想从(自定义)选项卡栏中知道。(例如,将具有 hidesBottomBarWhenPushed=YES 的 VC 推送到 Nac 控制器时)。

简而言之,我希望收到有关隐藏/显示标签栏的事件的通知,但在 Apple 的参考中找不到任何内容。我尝试查看 UITabBar、UITabBarDelegate、UITabBarController 和 UITabBarControllerDelegate,但似乎都只提供与标签栏项目相关的功能。

提前致谢。

4

2 回答 2

13

如果您使用的是标签栏控制器,UIKit 明确声明将在标签栏控制器的上下文中显示的每个导航控制器实例都将包含在其viewControllers属性中。现在每个UINavigationController实例都有一个委托,它定义了一个navigationController:willShowViewController:animated:方法,让您知道何时将视图控制器推送到它上面。

通过将标签栏控制器设置为推送到其上的每个导航控制器的委托,您可以分析被推送的视图控制器是否hidesBottomBarWhenPushed设置了属性并在这种情况下生成事件。

用于隐藏标签栏控制器的标签栏的算法如下:当视图控制器被推送到导航控制器上时,导航控制器本身包含在标签栏控制器中,如果导航控制器的导航堆栈中的任何视图控制器具有hidesBottomBarWhenPushed属性设置,那么标签栏应该被隐藏。

So the tab bar is hidden when a navigation controller is selected and one of the view controllers in its stack have the hidesBottomBarWhenPushedproperty set.

于 2011-02-13T23:09:07.323 回答
0

子类 UINavigationController 并实现 hidesBottomBarWhenPushed 后面的 setter(或子类 UIViewController 以直接子类 hidesBottomBarWhenPushed 方法)并将调用委托给 UITabBar(通过直接调用或 NSNotification)。

于 2010-12-30T16:10:47.803 回答