IOS开发—UITabBarController简单介绍

UITabBarController简单介绍

一、UITabBarController简介

IOS提供了3中视图切换的方法,除了熟悉的UINavagationController,另一个最常用的方法是使用UITabBarController(选项卡控制器,又叫分页栏控制器),另外一种方法是使用模态窗口,将在后面介绍。

和UInavagationController一样,UITabBarController同样只是一个容器,需要用视图控制器来填充。本文对UITabBarController的介绍是纯代码的,我们还可以使用Interface Building的方式创建以及设置,也是比较方便的,读者可自行尝试。

 

二、UITabBarController的创建:

与构建导航控制器的方法一样,步骤是:

1、在AppDelegate文件中创建一个窗口;

2、创建一个选项卡控制器(当然前提是创建一个选项卡控制器的类,继承于UITabBarController);

3、将该选项卡控制器实例作为窗口的根视图控制器

代码实例:

@interface AppDelegate ()
@end
@implementationAppDelegate
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    self.window.backgroundColor = [UIColor whiteColor];
    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    TabBarController *tbc = [[TabBarController alloc]init];
    self.window.rootViewController = tbc;
    [self.window makeKeyAndVisible];
    return YES;
}
@end

三、设置选项卡控制器的各个子视图控制器

为了演示的效果更加,我们创建了多个不同的视图控制器。直接来看代码:

#import "TabBarController.h"
#import "Test1ViewController.h"
#import "Test2ViewController.h"
#import "Test3ViewController.h"
#import "Test4ViewController.h"
#import "Test5ViewController.h"
 @interface TabBarController ()<UITabBarControllerDelegate>
@end
@implementationTabBarController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self loadBaseUI];
}
- (void)loadBaseUI
{
    //设置代理
    self.delegate = self;
    /*
     *这里需要注意的是,如果使用addChildViewController方法将试图控制器一个一个添加到tabBarController中,编译器在编译的时候也是一个一个添加tabBarItem的,如果添加的tabBarItem超过了5个,那么最终显示出来的结果只有5个tabBarItem(实际上是不只五个的)。
      如果用另一种方法:将所有要添加的视图控制器先存放在一个数组中,然后将数组赋予self.viewControllers属性,在视图控制器超过5个的情况下,结果就会不一样(第5个tabBarItem显示为更多)
     */
    Test1ViewController *VC1 = [[Test1ViewController alloc]initWithNibName:@"Test1ViewController" bundle:nil];
    VC1.view.backgroundColor = [UIColor greenColor];
    VC1.tabBarItem.title = @"电话";
    VC1.tabBarItem.image = [UIImage imageNamed:@"电话"];
    VC1.tabBarItem.selectedImage = [UIImage imageNamed:@"电话高亮"];
    VC1.tabBarItem.badgeValue = @"2";
//    [self addChildViewController:VC1];
//    UINavigationController *navc =[[UINavigationController alloc]initWithRootViewController:VC1];
//    [self addChildViewController:navc];

    Test2ViewController *VC2 = [[Test2ViewController alloc]init];
    VC2.view.backgroundColor = [UIColor orangeColor];
    VC2.tabBarItem.title = @"联系人";
    VC2.tabBarItem.image = [UIImage imageNamed:@"联系人"];
    VC2.tabBarItem.selectedImage = [UIImage imageNamed:@"联系人高亮"];
//    [self addChildViewController:VC2];
   
    Test3ViewController *VC3 = [[Test3ViewController alloc]init];
    VC3.view.backgroundColor = [UIColor blueColor];
    VC3.tabBarItem.title = @"收藏";
    VC3.tabBarItem.image = [UIImage imageNamed:@"收藏"];
    VC3.tabBarItem.selectedImage = [UIImage imageNamed:@"收藏高亮"];
//    [self addChildViewController:VC3];
   
    Test4ViewController *VC4 = [[Test4ViewController alloc]init];
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
    btn.backgroundColor = [UIColor greenColor];
    btn.frame = CGRectMake(100, 120, 120, 40);
    [btn setTitle:@"点击" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
    [VC4.view addSubview:btn];
    VC4.view.backgroundColor = [UIColor brownColor];
    VC4.tabBarItem.title = @"相机";
    VC4.tabBarItem.image = [UIImage imageNamed:@"相机"];
    VC4.tabBarItem.selectedImage = [UIImage imageNamed:@"相机高亮"];
//    [self addChildViewController:VC4];
   
    Test5ViewController *VC5 = [[Test5ViewController alloc]init];
    VC5.tabBarItem.title = @"测试";
    VC5.tabBarItem.image = [UIImage imageNamed:@"收藏"];
//    [self addChildViewController:VC5];
   
    Test5ViewController *VC6 = [[Test5ViewController alloc]init];
    VC5.tabBarItem.title = @"测试";
    VC5.tabBarItem.image = [UIImage imageNamed:@"收藏"];
//    [self addChildViewController:VC6];
   
    Test5ViewController *VC7 = [[Test5ViewController alloc]init];
    VC5.tabBarItem.title = @"测试";
    VC5.tabBarItem.image = [UIImage imageNamed:@"收藏"];
//    [self addChildViewController:VC7];
     
    //设置tabBarController的子视图控制器
    NSArray *arr = [NSArray arrayWithObjects:VC1,VC2,VC3,VC4,VC5,VC6,VC7,nil];
    self.viewControllers = arr;
    //该属性在more中的Edit按钮点击后有所体现
    self.customizableViewControllers = arr;
   
    //设置tabBar风格
    self.tabBar.barStyle = UIBarStyleDefault;
    //设置tabBar的背景颜色
//   self.tabBar.barTintColor = [UIColor lightGrayColor];   
//注意设置backGroundColor并不是设置tarBar的背景是,而是设置bar底下一层的颜色
    self.tabBar.backgroundColor = [UIColor lightGrayColor];
    //设置所选中的tabBarItem的主题色(默认为蓝色)
    self.tabBar.tintColor = [UIColor greenColor];
}


#pragma mark - transformAction
- (void)clickAction:(UIButton *)sender
{
    //切换到第一个子视图控制器
    //方法1
//    self.selectedViewController =[self.viewControllers objectAtIndex:0];
    //方法2
    self.selectedIndex = 0;
}
@end


效果展示:



四、UITabBarControllerDelegate代理方法

首先别忘了对自己设置代理:

self.delegate = self;

//点击某个tabBarItem的时候调用,返回BOOL值,NO表示无法加载到指定子视图控制器
- (BOOL)tabBarController:(UITabBarController *)tabBarControllershouldSelectViewController:(UIViewController *)viewController
{
    if ([self.viewControllers indexOfObject:viewController] == 1) {
        NSLog(@"禁止访问");
        return NO;
    }
    return YES;
}

//切换进入到某个子视图控制器的时候调用
- (void)tabBarController:(UITabBarController *)tabBarControllerdidSelectViewController:(UIViewController *)viewController
{
    NSLog(@"Number %dviewController selected",[self.viewControllers indexOfObject:viewController]);
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

//通过more中的Edit调出定制界面后调用
- (void)tabBarController:(UITabBarController *)tabBarControllerwillBeginCustomizingViewControllers:(NSArray *)viewControllers
{
    NSLog(@"定制分页栏");
}

//定制结束后调用,参数changed表示是否改变了分页栏
- (void)tabBarController:(UITabBarController *)tabBarControllerwillEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
    switch (changed) {
        case YES:
            NSLog(@"分页栏重新定制");
            break;
           
        default:
            NSLog(@"分页栏未改变");
            break;
    }
}

//退出定制的时候调用
- (void)tabBarController:(UITabBarController *)tabBarControllerdidEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
    NSLog(@"退出定制");
}


由于各个代理方法涉及的界面较多,这里就不一一贴出结果了,读者请自行尝试以更好的体会。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值