我在我创建的Tab Bar控制器的自定义子类中有一个Nav控制器。
我想在(自定义)标签栏中知道每当显示的控制器之一试图隐藏或显示标签栏时。 (例如,将具有hidesBottomBarWhenPushed = YES的VC推送到Nac控制器上时)。
简而言之,我希望收到隐藏/显示标签栏的事件的通知,但在Apple的参考资料中找不到任何内容。我尝试查看UITabBar,UITabBarDelegate,UITabBarController和UITabBarControllerDelegate,但似乎只提供与标签栏项相关的功能。
提前致谢。
答案 0 :(得分:10)
如果您使用标签栏控制器,UIKit会明确声明将在标签栏控制器的上下文中显示的每个导航控制器实例都将属于其viewControllers
属性。现在每个UINavigationController
实例都有一个委托,它定义了一个navigationController:willShowViewController:animated:
方法,可以让你知道何时将视图控制器推到它上面。
通过将标签栏控制器设置为推送到其上的每个导航控制器的委托,您可以分析正在推送的视图控制器是否设置了hidesBottomBarWhenPushed
属性,并在这种情况下生成事件。
用于隐藏标签栏控制器标签栏的算法如下:当导航控制器上的视图控制器被按下时,如果导航控制器本身包含在标签栏控制器中,则导航控制器的导航堆栈中的任何视图控制器设置了hidesBottomBarWhenPushed
属性,然后应隐藏标签栏。
因此,当选择导航控制器并且其堆栈中的一个视图控制器设置了hidesBottomBarWhenPushed
属性时,隐藏了选项卡栏。
答案 1 :(得分:0)
子类UINavigationController并实现hidesBottomBarWhenPushed后面的setter(或者将UIViewController子类化为hidesBottomBarWhenPushed方法的子类)并将调用委托给UITabBar(通过直接调用或NSNotification)。