iOS学习笔记:UITabBarController

UITabBarController在项目中用的不太频繁,但确实很多项目中必不可少的一个重要部分,今天来自己整理一下相关使用方法

  • 在新建工程时发现有一个Tabbed Application选项,创建后的界面是这个样子的,感兴趣的童鞋可以自己研究一下
    iOS学习笔记:UITabBarController_第1张图片
    Tabbed Application
  • 言归正传,我们还是使用比较常用的Single ViewApplication来创建

1、UITabBarController的基础设置

  • 首先创建一个tabBarController继承自UITabBarController,然后创建三个viewController并添加下面的方法
- (void)setUpAllChildViewController{
    
    // 创建子试图控制器
    FirstViewController *firstVC = [[FirstViewController alloc] init];
    [self addChildVC:firstVC title:@"第一页" image:@"tabbar_first" selectedImage:@"tabbar_first_selected"];
    
    secondViewController *secondVC = [[secondViewController alloc] init];
    [self addChildVC:secondVC title:@"第二页" image:@"tabbar_second" selectedImage:@"tabbar_second_selected"];
    
    thirdViewController *thirdVC = [[thirdViewController alloc] init];
    [self addChildVC:thirdVC title:@"第三页" image:@"tabbar_mine" selectedImage:@"tabbar_mine_selected"];
    
}

/**
 *  添加一个子视图控制器
 *
 *  @param childVC       自控制器
 *  @param title         标题
 *  @param image         图片
 *  @param selectedImage 选中图片
 */
- (void)addChildVC:(UIViewController *)childVC
             title:(NSString *)title
             image:(NSString *)image
     selectedImage:(NSString *)selectedImage{
    
    childVC.title = title;
    //设置图片及其渲染模式
    childVC.tabBarItem.image = [[UIImage imageNamed:image] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    childVC.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    // 设置选中状态下文字样式
    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
    textAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor];
    textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:13];
    [[UITabBarItem appearance] setTitleTextAttributes:textAttrs forState:UIControlStateSelected];
    
    // 设置普通状态下文字样式
    NSMutableDictionary *selectTextAttrs = [NSMutableDictionary dictionary];
    
    selectTextAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:13];
    
    [[UITabBarItem appearance] setTitleTextAttributes:selectTextAttrs forState:UIControlStateNormal];
    
    //给每一个子视图控制器都加一个导航控制器
    UINavigationController *nvc = [[UINavigationController alloc]initWithRootViewController:childVC];
    // 添加为子视图控制器
    [self addChildViewController:nvc];
    
    
    [UITableViewCell appearance].selectionStyle = UITableViewCellSelectionStyleNone;
    
}

//禁用tabbar双击
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    UIViewController * vcSelected = tabBarController.selectedViewController;
    
    if ([vcSelected isEqual:viewController]) {
        
        return NO;
        
    }
    return YES;
}

  • 然后在viewDidLoad中调用setUpAllChildViewController方法
  • 最后,在AppDelegate中创建该类并设置为rootViewController就可以正常运行了
HHTabBarController *tb = [[HHTabBarController alloc]init];
self.window.rootViewController = tb;
[self.window makeKeyAndVisible];

2、其他应用唤醒APP时回到首页

//回到首页
[self.tabbar.childViewControllers[i] popToRootViewControllerAnimated:NO];
self.tabbar.selectedIndex = 0
//首页控制器
UINavigaitonController *nav=(UINavigaitonController *)self.tabbar.viewControllers[0];
UIViewController *vc=(UIViewController*)nav.viewControllers.lastObject;

3、如果不想要tabbar是半透明

self.tabBarController.tabBar.translucent = NO;

最后,附上一篇自定义tabBarItem的文章。

你可能感兴趣的:(iOS学习笔记:UITabBarController)