IOS开发—UITabBarController简单介绍

来源:互联网 发布:mac 控制安卓手机屏幕 编辑:程序博客网 时间:2024/06/08 04:10

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 0
原创粉丝点击