iOS开发 oc 自定义navigationcontroller如何在push下一页时隐藏tabbar

339 阅读2分钟

在iOS开发中,使用Objective-C自定义UINavigationController以实现在push下一页时隐藏UITabBar,可以通过以下几种方法来实现:

方法一:使用系统自带的hidesBottomBarWhenPushed属性

这是最简单且推荐的方法。只需在push到下一个页面之前,将目标视图控制器的hidesBottomBarWhenPushed属性设置为YES即可。

ViewController *nextVC = [[ViewController alloc] init];

nextVC.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:nextVC animated:YES];

这种方法的优点是代码简洁,且与系统的动画效果无缝对接。但是,如果需要在多个页面中频繁使用,可能会导致代码重复。

方法二:重写UINavigationControllerpushViewController:animated:方法

为了统一处理所有push操作,可以自定义一个继承自UINavigationController的类,并重写其pushViewController:animated:方法。这样,所有通过该导航控制器push的视图控制器都会自动隐藏UITabBar。

// 自定义导航控制器类

@interface CustomNavigationController : UINavigationController

@end

@implementation CustomNavigationController

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {

if (self.viewControllers.count > 0) {

viewController.hidesBottomBarWhenPushed = YES;

}

[super pushViewController:viewController animated:animated];

}

@end

在使用时,将UITabBarController中的UINavigationController替换为自定义的CustomNavigationController。

方法三:使用UINavigationControllerDelegate协议

通过实现UINavigationControllerDelegate协议中的navigationController:willShowViewController:animated:方法,可以在push或pop视图控制器时动态控制UITabBar的显示与隐藏。

// 在自定义导航控制器中实现UINavigationControllerDelegate协议

@interface CustomNavigationController : UINavigationController

@end

@implementation CustomNavigationController

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController {

self = [super initWithRootViewController:rootViewController];

if (self) {

self.delegate = self;

}

return self;

}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

if (viewController.hidesBottomBarWhenPushed) {

self.tabBarController.tabBar.hidden = YES;

} else {

self.tabBarController.tabBar.hidden = NO;

}

}

@end

这种方法可以更灵活地控制UITabBar的显示与隐藏,但需要注意的是,如果在多个地方修改了hidesBottomBarWhenPushed属性,可能会导致逻辑复杂化。

方法四:在Storyboard中设置

如果使用Storyboard进行界面设计,可以在Storyboard中直接设置视图控制器的Hide Bottom Bar on Push属性。这样,当从该视图控制器push到下一个视图控制器时,UITabBar会自动隐藏。

总结

以上方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。对于大多数情况,推荐使用系统自带的hidesBottomBarWhenPushed属性或重写UINavigationController的pushViewController:animated:方法。如果需要更复杂的逻辑控制,可以考虑使用UINavigationControllerDelegate协议。