用navgationController和tabbarViewC

2017-07-27  本文已影响32人  fly大梦想家

多个子vc公有一个navgationController,一个tabbarController

1.自定义个navgationController,是window的rootVC,navgationVC的rootVC是TabVC

// 在navigationController.m中
- (void)setRootViewControllerWithNavigation{
    _tab = [[UITabBarController alloc]init];
    
    MainViewController *mainViewController = [MainViewController new];
 
    NewsViewController *activeViewController = [NewsViewController new];
  
    ManagerViewController *managerViewController = [ManagerViewController new];

    StoreViewController *storeViewController = [StoreViewController new];
   
    MineViewController *mineViewController = [MineViewController new];
  
    mainViewController.title = @"首页";
    activeViewController.title = @"资讯";
    managerViewController.title = @"游戏管理";
    storeViewController.title = @"商城";
    mineViewController.title = @"我的";
    _tab.viewControllers = @[mainViewController,activeViewController,storeViewController,mineViewController];
    self.navigationController = [[BLNavigationController alloc]initWithRootViewController:_tab];
    
    self.appWindow.rootViewController = self.navigationController;
}
// 在applegate中调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    [[BLViewControllerManager sharedManager] setRootViewControllerWithNavigation];
    return YES;
}

2.不需要navgationBar的在vc的viewWillAppear方法中隐藏,隐藏后所有vc的navgationBar都会被隐藏,所以需要的vc中的viewWillAppear中设置为NO;其他属性也可以在该方法中区分

- (void)viewWillAppear:(BOOL)animated{
    self.navigationController.navigationBarHidden = YES;
}

3.给vc设置navgationItem标题时按普通方法无法显示标题
self.navigationController.navigationItem.title = @"资讯中心";
,所以需要这样写

- (void)viewWillAppear:(BOOL)animated{
    self.navigationController.navigationBarHidden = NO;
    self.tabBarController.navigationItem.title = @"资讯中心";
    self.tabBarController.navigationItem.rightBarButtonItem = nil;
    self.tabBarItem.badgeValue = @"1";    // tabar上的小红点数字,类似微信未读数
}

每个子vc有自己的navgationController,共有一个tabbarController

1 . 自定义TabbarVC,是window的rootVC,TabbarVC的viewcontrollers是navgationVC数组

// 在自定义的TabbarVC中
-(void)createTabBar{
    NewsViewController * news = [[NewsViewController alloc] init];
    HeroViewController * hero = [[HeroViewController alloc] init];
    FindViewController * find = [[FindViewController alloc] init];
    MEViewController * me = [[MEViewController alloc] init];
    
    NSMutableArray * array = [NSMutableArray arrayWithObjects:news,hero,find,me, nil]; // 不要用不可变的给可变的赋值
    NSArray * titleArr = @[@"新闻",@"英雄",@"发现",@"我"];
    NSArray * normalArr = @[@"tab_icon_news_normal@2x",@"tab_icon_friend_normal@2x",@"tab_icon_quiz_normal@2x",@"tab_icon_more_normal@2x"];
    NSArray * selectedArr = @[@"tab_icon_news_press@2x",@"tab_icon_friend_press@2x",@"tab_icon_quiz_press@2x",@"tab_icon_more_press@2x"];
    // 标签栏控制器
    for (int i = 0; i< array.count; i ++) {
        // 得到每个视图控制器
        UIViewController * vc = array[i];
        // 视图控制器 --> 导航控制器
        UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc];
        if (i == 2) {
            nav.navigationBarHidden = YES;
        }
        // 替换数组(视图控制器 --> 导航控制器)
        [array replaceObjectAtIndex:i withObject:nav];
        // 标题
        vc.title = titleArr[i];
        // *渲染模式 : 保证显示图片与给定图片色调一致
        UIImage * normalImage = [UIImage imageNamed:normalArr[i]];
        UIImage * selectedImage = [UIImage imageNamed:selectedArr[i]];
        // 进行渲染后赋值
        nav.tabBarItem.image = [normalImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        nav.tabBarItem.selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    }
    self.viewControllers = array;
}
// 在applegate中调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
  _window.rootViewController = [[MainTabBarViewController alloc] init];
    return YES;
}

每个子VC的navgation不会互相影响都可以随便设置属性了

上一篇下一篇

猜你喜欢

热点阅读