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]; } }