一些概念:
1. //NSUserDefaults
//在iOS中有很多种方式来做本地化数据存储,之前我们学过的归档解档,plist文件
//NSUserDefaults也是用来做本地化数据存储,它是轻量级的,它是以一种特殊的路径存储在手机中的,它存储的数据类型是有限制的,它类似于plist文件,存储的类型包括:NSArray,NSDictionary,NSData,NSSting,NSNumber,NSBool,NSDate,注意:不能存储自定义的对象,在NSArray和NSDictionary中只能存储以上类型
//获得单例对象
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
//添加键值对 将数据添加到单例对象中
[user setInteger:1 forKey:@"index"];
//将数据同步到本地
[user synchronize];
//获取数据
[user integerForKey:@"index"];
2.//什么是标签栏控制器?
//它是UITabBarController的对象,它是用于管理视图控制器的,它继承自UIViewController,它的管理方式是数组的管理方式,特点就是数组中的元素之间是互不相扰的,他们之间是平行关系
//导航控制器是继承自UIViewController,他是视图控制器的管理器,他是通过栈的管理方式来管理视图控制器,栈的特点是先进后出,元素之间是存在一定的联系的。
//UINavigationController 导航控制器
//UINavigationBar 导航栏
//UINavigationItem 导航栏项
//UITabBarController 标签栏控制器
//UITabBar 标签栏
//UITabBarItem 标签栏项
//第一种
ViewController1 *vc1 = [[ViewController1 alloc] init];
//设置标签栏项的标题
vc1.tabBarItem.title = @"提莫";
//设置标签栏项在正常状态下的图片
vc1.tabBarItem.image = [UIImage imageNamed:@"tab_0"];
//设置标签栏项在选中状态下的图片
vc1.tabBarItem.selectedImage = [UIImage imageNamed:@"tab_s"];
UINavigationController *navi1 = [[UINavigationController alloc] initWithRootViewController:vc1];
//第二种(常用)
ViewController2 *vc2 = [[ViewController2 alloc] init];
vc2.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"慎" image:[UIImage imageNamed:@"tab_1"] selectedImage:[UIImage imageNamed:@"tab_s"]];
UINavigationController *navi2 = [[UINavigationController alloc] initWithRootViewController:vc2];
//第三种 设置系统样式的标签栏项(用的少)
ViewController3 *vc3 = [[ViewController3 alloc] init];
vc3.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks tag:0];
UINavigationController *navi3 = [[UINavigationController alloc] initWithRootViewController:vc3];
//第四种
ViewController4 *vc4 = [[ViewController4 alloc] init];
vc4.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"劫" image:[UIImage imageNamed:@"tab_2"] tag:0];
//设置徽标 一定要注意这个属性是需要接收字符串类型的
vc4.tabBarItem.badgeValue = @"5";
UINavigationController *navi4 = [[UINavigationController alloc] initWithRootViewController:vc4];
NSArray *viewControllers = @[navi1,navi2,navi3,navi4];
UITabBarController *tabBarC = [[UITabBarController alloc]init];
tabBarC.viewControllers = viewControllers;
//设置默认选中项
// tabBarC.selectedIndex = 2;
tabBarC.selectedViewController = viewControllers[1];
self.window.rootViewController = tabBarC;
3.//更改标签栏项上的标题颜色
[VC.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor redColor]} forState:UIControlStateSelected];
一些实用方法:
1.判断程序是不是第一次启动:
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
BOOL isFirst = [user boolForKey:@"isFirst"];
label.text = isFirst?@"不是第一次启动":@"是第一次启动";
if (!isFirst) {
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setBool:YES forKey:@"isFirst"];
//数据同步到本地
[user synchronize];
}
2.不导入其他viewController的头文件,在AppDelegate中声明其他viewController
NSString *VCName = [NSString stringWithFormat:@"ViewController%d",i+1];
Class myClass = NSClassFromString(VCName);
UIViewController *VC = [[myClass alloc] init];
3.进入程序然后退出,下次再进此程序,还在上次退出时的位置
(1).AppDelegate 遵守<UITabBarControllerDelegate>
(2)建立代理关系
tabBarC.delegate = self;
(3)
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSInteger index = [user integerForKey:@"index"];
(4).
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"%ld",tabBarController.selectedIndex);
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setInteger:tabBarController.selectedIndex forKey:@"index"];
[user synchronize];
}