你的位置:首页 > 操作系统

[操作系统]IOS UI进阶03


导航控制器

1.导航控制器永远显示的是栈顶控制器的view

2.导航控制器中做界面之间的跳转必须拿到导航控制器

3.调用pop方法并不会马上销毁当前控制器

4.popToViewController使用注意点,传入进去的控制器必须是导航控制器栈里面的控制器

5.导航条的内容由栈顶控制器决定,一个导航控制器只有一个导航条,因此只能由一个控制器决定,谁先显示在最外面,谁就是栈顶控制器.

6.在iOS7之后,默认会把导航条上的按钮的图片渲染成蓝色.

7.导航条上的子控件位置不需要我们管理,只需要管理尺寸

8.UINavigationItem:是一个模型,决定导航条的内容(左边内容,中间,右边内容)

  1. UIBarButtonItem:是一个模型,决定导航条上按钮的内容

10.以后只要看到item,通常都是苹果提供的模型,只要改模型就能修改苹果的某些控件.

1-控制器view的生命周期

  1. 控制器的view的生命周期方法都是以view开头

  2. viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear

3.在非ARC中viewDidUnload,经常用来清空界面上的数据

2-数据存储

1.plist存储

1.plist存储,生成一个plist文件.

2.plist不是数组就是字典,plist存储就是用来存储字典或者数组.

注意:Plist不能存储自定义对象

3.获取应用沙盒中Caches文件路径

  // directory:获取哪个文件夹  // domainMask:在哪个范围内搜索,NSUserDomainMask:表示在用户的手机上查找  // expandTilde:是否展开全路径 YES:表示展开全路径 NO:不会展开全路径,会把应用沙盒的路径用波浪号(~)代替  // 获取到Caches文件夹路径  NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

4.读取plist,之前是什么类型存储的,读取也是什么

2.偏好设置存储

  // 偏好设置存储:NSUserDefaults  // 以字典的形式进行偏好设置,用法跟字典.  // 偏好设置好处: 1.不需要关心文件名  //       2.快速进行键值对存储  //       3.直接存储基本数据类型

@implementation ViewController

- (IBAction)save:(id)sender { 

    // 获取单例

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    

    // @"123" key:pwd

    [defaults setObject:@"123" forKey:@"pwd"];

    // bool

    [defaults setBool:YES forKey:@"isOn"];

    // int

    [defaults setInteger:10 forKey:@"num"];    

}

- (IBAction)read:(id)sender {

        // 利用NSUserDefaults单例

   NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"];

   NSInteger i = [[NSUserDefaults standardUserDefaults] integerForKey:@"num"];

    NSLog(@"%@--%ld",pwd,i);  

}

 

3.归档

1.NSKeyedArchiver专门用来做自定义对象归档

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档// 作用:告诉苹果当前对象中哪些属性需要归档- (void)encodeWithCoder:(NSCoder *)aCoder{  [aCoder encodeObject:_name forKey:@"name"];  [aCoder encodeInt:_age forKey:@"age"];}// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档// 作用:告诉苹果当前对象中哪些属性需要解档// initWithCoder什么时候调用:只要解析一个文件的时候就会调用- (id)initWithCoder:(NSCoder *)aDecoder{  #warning [super initWithCoder]  if (self = [super init]) {    // 解档    // 注意一定要记得给成员属性赋值   _name = [aDecoder decodeObjectForKey:@"name"];   _age = [aDecoder decodeIntForKey:@"age"];  }  return self;}