想在baseViewController基类里做判断隐藏tabBar的逻辑,不知道应该写在哪里比较好,如何判断?我想到的是用navigationController.viewControllers.count的数量,但会涉及到两个viewContoller间声明周期的交替,在viewwillAppear和viewWillDisappear里写的,写的有问题,请问如何判断这个比较好,或者隐藏tabbar在哪里写比较好,谢谢
想在baseViewController基类里做判断隐藏tabBar的逻辑,不知道应该写在哪里比较好,如何判断?我想到的是用navigationController.viewControllers.count的数量,但会涉及到两个viewContoller间声明周期的交替,在viewwillAppear和viewWillDisappear里写的,写的有问题,请问如何判断这个比较好,或者隐藏tabbar在哪里写比较好,谢谢
个人觉得在navigation的代理方法里。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
首先获取程序的主窗口
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow
//获取tabBarVC
UITabeBarController *tabBarVC = (UITabBarController*)keyWindow.rootViewController;
//移除系统的tabBarButton
for(UIView *tabBarButton in tabBarVC.tabBar.subviews) {
if ([tabBarButton isKindOfClass:NSClassFromString(@“UITabBarButton”)]){
[tabBarButton removeFromSuperview];
}
}
}
我也是在 nav 里面做这件事
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.childViewControllers.count >= 1) {
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:animated];
}
CocoaTouch 在一个NavigationController进行Push操作的时候,隐藏TabBar的方式,应该是调用的sendSubviewToBack
这个方法把TabBar给放到后面去。我在自定义转场动画时,通过这种方式做到和苹果默认的一样的效果。你可以试试。
let needPushTabBar = toVC.navigationController?.tabBarController != nil && toVC.hidesBottomBarWhenPushed && toVC.navigationController?.childViewControllers.count == 2
if needPushTabBar {
toVC.navigationController?.tabBarController?.view.sendSubviewToBack(tabBar!)
}
/**
* 重写push方法实现界面跳转后的各种设置
*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
if (self.childViewControllers.count > 0) {
// push跳转后隐藏底部TabBar栏
viewController.hidesBottomBarWhenPushed = YES;
}
// 先设置属性,再调用super的push方法,避免设置的属性被覆盖
[super pushViewController:viewController animated:animated];
}
2 回答1k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答2.7k 阅读
1 回答1.5k 阅读
1 回答1.4k 阅读
1.7k 阅读
1 回答902 阅读
写在init()方法;