UI-第三讲:视图控制器

UI-第三讲:视图控制器
* 自定义视图(label-textField组合视图)
* 视图控制器
* MVC
* 屏幕旋转
* 内存警告

一 自定义视图
* 自定义视图:系统标准UI之外,自己组合而出的新的视图
* 特点:可复用,可移植(高内聚,低耦合)
* 步骤:
1. 根据需求的不同,所继承的类也会不同,一般继承于UIView,
2. 创建一个UIView子类:@Interface LTView: UIView
3. 在类的初始化方法中添加子视图:
       [self addSubView : _leftLabel];
       [self addSubView : _rightField];
4. 类的.h文件提供一些接口(方法),便于外界操作子视图.
       @property (nonatomic, retain) UILabel *leftLabel;
       @property (nonatomic, retain) UITextField *rightField;
* 自定义LTView使用了一种设计模式: 复合设计模式

二 视图控制器
* UIViewController是所有视图控制器的父类
* 功能:
1. 控制视图大小变化,布局视图,响应事件
2. 检测以及处理内存警告
3. 检测以及处理屏幕旋转
4. 检测视图切换
5. 实现模块独立,提高复用性

* 在APPDelegate里创建视图控制器对象 ,作为window的根视图控制器

-(void)loadView 
{ 
    [super loadView]; 
    self.myView = [[MyView alloc]initWithFrame:self.view.frame]; 
    self.view = self.myView; 
    [self.myView release];
}
#pragma mark - 视图加载完毕
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor grayColor]; 
    NSLog(@"%s  %d", __FUNCTION__, __LINE__); 
//为⾃自定义视图⾥里⾯面的按钮添加点击事件
    [self.myView.button addTarget:self action:@selector(buttonAction) 
forControlEvents:UIControlEventTouchUpInside]; 
}
#pragma mark - 点击⽅方法
-(void)buttonAction 
{ 
    NSLog(@"点击了⾃自定义视图⾥里⾯面的按钮"); 

三  MVC
* UIViewController是MVC设计模式的核心
* MVC是一个框架级的设计模式
* M是Model 主要用于建立数据模型(数据的结构)
* V是View 能看到的所有控件都是View,View主要的功能是展示数据
* C是控制器,主要是控制M和V的通信

四 检测屏幕旋转
* 检测屏幕旋转,需要重写下面几个方法:
1. supportedInterfaceOrientations (设置设备⽀支持旋转的方向,如果不添加,视图控制器将无法检测屏幕的旋转
2. willRotateToInterfaceOrientation:duration:(暂停音乐、关闭视图交互等)
3. willAnimateRotationToInterfaceOrientation:duration:(添加自定义动画等)
4. didRotateFromInterfaceOrientation:(播放音乐、打开视图交互等)
* 视图的处理:
1. 注意视图控制器会自动调整view的⼤小以适应屏幕旋转,bounds被修改,触发view的layoutSubviews⽅法
2. view重写layoutSubviews⽅法,根据设备⽅向,重新布局
3. [UIApplication shareApplication].statusBarOrientation提供设备当前⽅向

五 处理内存警告
* 内存警告来源:⼿机内存80M,程序运行过程中内存接近80M时程序会为每一个视图控制器发送内存警告消息
* 如何处理:
1. 控制器能监测内存警告,以便我们避免内存不够引起的crash。
2. 在定义的controller子类中重写didReceiveMemoryWarning方法
3. 释放暂时不使用的资源(self.view及view的⼦子视图例如数据对象、图像)

#pragma mark - 内存警告⽅方法
-(void)didReceiveMemoryWarning {
//即使没有显⽰示在window上,也不会⾃自动的将self.view释放。 
    [super didReceiveMemoryWarning]; 
      NSLog(@"%s  %d", __FUNCTION__, __LINE__); 
// Dispose of any resources that can be recreated.
}


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    //根视图已经加载过,根视图未显⽰示
    if ([self isViewLoaded] == YES && self.view.window == nil) { 
        //将根视图销毁,目的是再次进⼊入时能够重新加载调⽤用viewDidLoad函数。
        self.view = nil; 
    } 
}

总结:
1. iOS提供了很多标准组件,标准组件完成我们的需要,但是适当的封装,组合一个新的控件⽆疑能给我们带来效率上的提⾼。学会自定义控件是你成为⾼手的关键⼀一步。•
2. 视图控制器是MVC中的C,⽤用于处理视图触发的事件
3. 视图控制器处理旋转和内存警告

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

•- (void)viewDidLoad;

•- (void)loadView;

•- (void)viewWillAppear:(BOOL)animated;

•- (void)viewWillDisappear:(BOOL)animated;

•- (void)viewDidAppear:(BOOL)animated;

•- (void)viewDidDisappear:(BOOL)animated


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

•- (void)viewDidLoad;

•- (void)loadView;

•- (void)viewWillAppear:(BOOL)animated;

•- (void)viewWillDisappear:(BOOL)animated;

•- (void)viewDidAppear:(BOOL)animated;

•- (void)viewDidDisappear:(BOOL)animated;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值