做个调查: 两种常见的UITabBarController+UINavigationController模式, 你使用哪种?

2017-03-21 08:22:52来源:CSDN作者:feng2qing人点击

第七城市th7cn

绝大部分软件都采用了UITabBarController+UINavigationController的设计方式,也是一种很主流很经典的设计方式. 来聊聊他不同的实现方式


方式一:TabBarController的viewControllers + 一个NavigationController

创建过程大概如下(关键代码):

AppDelegate.mTabBarController *tabVC = [[TabBarController alloc]init];//全局就这一个导航控制器UINavigationController *nav =[[UINavigationController alloc] initWithRootViewController:tabVC];self.window.rootViewController = nav;TabBarController.m- (void)viewDidLoad {    [super viewDidLoad];    [self addChildVc:[[ChatViewController alloc] init] title:@"Chat" image:@"tabbar_home" selectedImage:@"tabbar_home_selected"];    [self addChildVc:[[ContactsListViewController alloc] init] title:@"Contact" image:@"tabbar_contacts" selectedImage:@"tabbar_contacts_selected"];    [self addChildVc:[[MoreViewController alloc] init] title:@"More" image:@"tabbar_more" selectedImage:@"tabbar_more_selected"];    [self addChildVc:[[ProfileViewController alloc] init] title:@"Profile" image:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"];}- (void)addChildVc:(UIViewController *)childVc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage{    childVc.title = title;    childVc.tabBarItem.image = [UIImage imageNamed:image];    childVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];    [self addChildViewController:childVc];}

方式二:TabBarController的viewControllers + 多个NavigationController

创建过程大概如下(关键代码):

AppDelegate.mTabBarController *tabVC = [[TabBarController alloc]init];self.window.rootViewController = tabVC;TabBarController.m- (void)viewDidLoad {    [super viewDidLoad];    [self addChildVc:[[ChatViewController alloc] init] title:@"Chat" image:@"tabbar_home" selectedImage:@"tabbar_home_selected"];    [self addChildVc:[[ContactsListViewController alloc] init] title:@"Contact" image:@"tabbar_contacts" selectedImage:@"tabbar_contacts_selected"];    [self addChildVc:[[MoreViewController alloc] init] title:@"More" image:@"tabbar_more" selectedImage:@"tabbar_more_selected"];    [self addChildVc:[[ProfileViewController alloc] init] title:@"Profile" image:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"];}- (void)addChildVc:(UIViewController *)childVc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage{    childVc.title = title;    childVc.tabBarItem.image = [UIImage imageNamed:image];    childVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];    // 每一个控制器都是导航控制器    UINavigationViewController *navigationVc = [[UINavigationViewController alloc] initWithRootViewController:childVc];    [self addChildViewController:navigationVc];}

对比分析

第一种方式:

导航控制器上的title不能和tabbar上面的同步,需要手动单独设置,比如可以在控制器的viewWillAppear:方法里面设置.

第二种方式:

tabbar上的标题默认会直接同步到导航控制器上.

每个界面都有自己的导航控制器, 界面跳转都有自己的栈, 可能会更加灵活.


你习惯使用哪种呢? Why?

第七城市th7cn

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台