iOS开发-UI (十一) UITabBarController

知识点:

1.UITabBarController使用

2.UITabBarItem使用

 

关于TabBarController除了本次整理的内容,有兴趣的可以看下我以前发过的这两篇,在实际开发中很实用的东西.

RDVTabBarController的基本使用 以及tabbar的防止双点击方法

从tabBarController的一个item上的控制器跳转到另一个item上的控制器

 

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

UITabBarController

    1.创建方式

    2.如何把一个UIViewController加入到UITabBarController

    3.如何把一个UINavigationController加入到UITabBarController

    4.如何记住点击顺序

    5.设置和获取选中项

@property(nonatomic) NSUInteger selectedIndex;

 

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

UITabBarItem

 

    1.UITabBarItem和UITabBarController关系

tabBarItem是UIViewController的一个属性

这个属性是为UITabBarController服务的

    2.创建文字和图片的UITabBarItem 

      - (id)initWithTitle:(NSString *)title 

      image:(UIImage *)image 

tag:(NSInteger)tag;

 

-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{

    

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

//设置文字带图片类型的

self.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"红色" image:[UIImage imageNamed:@"1_selected"] tag:0];

 

//设置文字,选中图片和非选中图片类型

     // self.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"红色" image:[UIImage imageNamed:@"3_normal"] selectedImage:[UIImage imageNamed:@"3_selected"]];

}

 

 

注意:ios7后添加的函数

- (instancetype)initWithTitle:(NSString *)title 

image:(UIImage *)image 

selectedImage:(UIImage *)selectedImage

 

    3.创建系统自带的UITabBarSystemItem

- (id)initWithTabBarSystemItem:(UITabBarSystemItem)systemItem 

  tag:(NSInteger)tag;

 

//设置系统类型

self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemTopRated tag:0];

 

 

    4.设置UITabBarItem徽标

      @property(nonatomic,copy) NSString *badgeValue

    

//设置徽标

self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld",10L];

 

 

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

UITabBarController使用注意

    1.UITabBarController数量限制

      1)tabBarController中最多只允许显示5个试图控制器

超出的系统会自动添加一个more

    2.UITabBarController编辑

用户可以随意设置每个控制的显示的位置

 

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

UITabBarController顺序

    1.记录用户最后一次点击的viewController

      1)NSUserDefaults作用

NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等

      2)NSUserDefaults创建

  + (NSUserDefaults *)standardUserDefaults

      3)存储数据

- (void)set[数据类型]:(数据类型)value forKey:(NSString *)defaultName;

      4)同步数据

- (BOOL)synchronize;

      5)读取数据

- (数据类型)[数据类型]ForKey:(NSString *)defaultName;

 

    2.UITabBarControllerDelegate使用

      1)被选中的时候

    - (void)tabBarController:(UITabBarController *)tabBarController 

      didSelectViewController:(UIViewController *)viewController

#pragma mark- UITabBarControllerDelegate

//已经选择某一个控制器

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{

     NSLog(@"当前处于选中状态的控制器下标为%ld",tabBarController.selectedIndex);

    //记录

    NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

    [def setInteger:tabBarController.selectedIndex forKey:@"index"];

    //同步到本地

    [def synchronize];
}

 

 

      2)控制TabBarItem能不能选中

    - (BOOL)tabBarController:(UITabBarController *)tabBarController 

      shouldSelectViewController:(UIViewController *)viewController;

//准备选择某一个控制器(是否能选中该控制器)

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{

    //viewController 待会选中的控制器对象

    //tabBarController 当前管理的分栏控制器

    //NSLog(@"当前处于选中状态的控制器下标为%ld",tabBarController.selectedIndex);

    /*错误写法:不允许选中第一个控制器

    if (tabBarController.selectedIndex == 0) {

        return NO;

    }

     */

    if (viewController == tabBarController.viewControllers[0]) {

        return NO;
    }

    //返回YES,可以选中,返回NO,不允许选中

    return YES;
}

 

 

      3)下面这三个方法主要用于监测对moreViewController中对view controller的edit操作

   

 #pragma mark- UITabBarControllerDelegate

1.//准备开始编辑

-(void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers{

    

    NSLog(@"willBeginCustomizingViewControllers");

}

2.//准备结束编辑

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

    

    NSLog(@"willEndCustomizingViewControllers");

}

 

3.//已经结束编辑

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

    

    //判断是否改变了顺序

    if (changed) {

        

        //记录标题顺序

        NSMutableArray *newArr = [NSMutableArray new];

        

        for (UIViewController *ctl in viewControllers) {

            

            [newArr addObject:ctl.title];

        

        }    

        //保存到本地

        NSUserDefaults *def = [NSUserDefaults standardUserDefaults];

        [def setObject:newArr forKey:@"saveArr"];

        [def synchronize];     

    }

}

 

posted @ 2017-02-09 21:33  CUG  阅读(677)  评论(0编辑  收藏  举报