ui--UITabBarController

来源:互联网 发布:淘宝上的车秒贷靠谱吗 编辑:程序博客网 时间:2024/04/28 16:07

UITabBarController/分栏控制器/标签栏控制器

====================================

QQ:2530432526

【注】标签栏控制器,是UIKit框架提供的一个容器视图控制器,用于切换相同级别的兄弟视图控制器。iOS允许将导航控制器添加到标签栏控制器中进行管理(事实上这种结构非常常见),但原则上,不推荐将分栏控制器添加到导航控制器中进行管理。

导航栏控制器放在标签栏控制器里面

一、UITabBarItem

简介:UITabBarItem(标签栏项),呈现在标签栏(UITabBar)上

方法:

视图控制器通过tabBarItem属性来定制标签栏项的显示

1)xxx.tabBarItem.image   

设置标签栏项的图片

2)xxx.tabBarItem.selectedImage 

设置标签栏项的选中图片

4)xxx.tabBarItem.title   

设置标签栏项的title

5)xxx.tabBarItem.badgeValue  

设置标签栏项的徽标,用于提示用户

6)xxx.tabBarItem.titlePositionAdjustment

设置标题偏移量  正为下为右 负是上是左


创建UITabBarItem的方法

1)[[UITabBarItemalloc] initWithTitle:titleimage:image1tag:100];

2)[[UITabBarItemalloc]initWithTitle:titleimage:image selectedImage:selectImage];

根据title、image、selectedImage创建UITabBarItem

3)[[UITabBarItemalloc] initWithTabBarSystemItem:xxxtag:0]

    根据系统样式去创建UITabBarItem


二、UITabBarController方法

1)UITabBarController *tabController = [[UITabBarControlleralloc]init]

创建一个标签栏控制器

2)tabController.viewControllers = controllers;

1、viewControllers 数组,数组中的元素必须是视图控制器的对象

2、视图控制器对象的显示顺序(左到右)与在数组中的顺序一致

3、各个视图控制器是并列的关系,彼此互相独立,点击不同tabBarItem,切换不同的视图控制器的视图

4、当viewControllers中视图控制器的对象多于5个的时候,会自动创建一个标题为more的标签栏项,对应的为moreNavigationController的导航控制器的对象,第5个以及5以后的视图控制器会通过列表的形式呈现在moreNavigationController中

3)tabController.moreNavigationController 

获取到我们的moreNavigationController

4)tabController.selectedIndex

通过下标的方式指定被选中的视图控制器

5)tabController.selectedViewController

通过指定被选中的视图控制器的方式

 //特别重要的属性,设置哪个界面被选中

    tbc.selectedIndex=2;

    //设置哪个界面被选中,写的是添加到数组里面的视图

    tbc.selectedViewController=vc6;(源代码在讲课代码 day 22中)

6)tabController.delegate = self;


设置代理

三.协议方法 UITabBarControllerDelegate

1、- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

tabBar将要切换到某个子视图控制器,返回YES允许,返回NO不许,第二个参数是被选的视图控制器

2、- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

tabBar已经切换到某个子视图控制器,第二个参数是被选的视图控制器

3、- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers

当more中,将要编辑视图控制器顺序

4、- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

当more中,将要结束编辑视图控制器顺序

5、- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

当more中,已经结束编辑视图控制器顺序


重要:

//此属性需要在视图控制器vc7加入到导航控制器之前设置

    vc7.hidesBottomBarWhenPushed =YES;

当切换视图的时候,隐藏tabBar。


四.自制TabViewController

自制TabViewController第一步

NSMutableArray *controllers=[[NSMutableArrayalloc]init];

//通过数组的形式来创建视图,并且 运用Class class=NSClassFromString([NSString stringWithFormat:@“xxxx”,xxx]);来找数组中的对象,然后初始化视图控件UIViewController *vc=[[class alloc]init];然后把数组中的视图对象赋值给vc,然后把vc添加到开始自己初始化的可变数组中去

    NSMutableArray *controllers=[[NSMutableArrayalloc]init];

    NSArray *nameArray=@[@"界面一",@"界面二",@"界面三",@"界面四",@"界面五];如果视图控件不需要标题,这个数组可以不需要,把相关的去掉就可以了 。

    for (NSInteger i=0; i<nameArray.count; i++) {

        Class class=NSClassFromString([NSString stringWithFormat:@"ViewController%ld",i+1]);

        UIViewController *vc=[[class alloc]init];

        vc.title=nameArray[i];

        [controllers addObject:vc];

    }

    //设置自己的viewControllers

    self.viewControllers=controllers;

第二步

在设置之前需要使用

self.tabBar.hidden=YES;把标签栏隐藏了,然后在所在的视图上添加imageView或者UIView,在imageView上添加所需求的button 以及button的所学方法,设置button的两种状态正常状态和选中状态,btn.selected=YES;这个表示button是选中状态。在设置中必须把imageView的交互事件打开方法是imageView.userInteractionEnabled=YES;


如果你想下次进入app的时候是处在上次被选中的界面用如下方法


这是取值,这个是自己再添加一个方法 UI 第六天讲的

NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];

    NSInteger index=[[defaults objectForKey:@"index"] integerValue];

    //当我们的index的值在0-4之间,我们就更改tabBarController的视图的选中状态

    if (index<=4&&index>=0) {

        UIButton *btn=(UIButton *)[self.viewviewWithTag:100+index];

        [self btnClick:btn];

    }else{

        //我们认为这个数据不合理,就把值改为0,改成默认的第一个

        [defaults setObject:@"0"forKey:@"index"];

        [defaults synchronize];

    }

这个是存,一般是在button的点击方法中

NSUserDefaults *defaults=[NSUserDefaultsstandardUserDefaults];

    [defaults setObject:[NSStringstringWithFormat:@"%ld",btn.tag-100]forKey:@"index"];

    [defaults synchronize];



补充:

1、 button.titleEdgeInsets =UIEdgeInsetsMake(30, -25,0, 0);

设置button文字偏移,让开图片,四个值是相对于之前文字的上左下右的距离

2、button.imageEdgeInsets =UIEdgeInsetsMake(5,12, 15, 12);

设置图片偏移,让开文字

3、button.adjustsImageWhenHighlighted = NO;

设置点击不闪烁

4、viewWithTag这个方法是深度遍历,也就是说,不仅能找到self.view的子视图,也能找到子视图的子视图


UI day 7 什么是单例?对于app来说有很多界面,这些功能来说都是同一个人来做的,需要获取用户信息是一个人打开的,主要用来传值


点赞是代理写的,视图之间的传值。


0 0
原创粉丝点击