1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > UI 自定义视图 视图管理器

UI 自定义视图 视图管理器

时间:2024-03-19 10:11:22

相关推荐

UI 自定义视图  视图管理器

一>自定义label - textField 视图 自定义视图:系统标准UI之外,自己组合而出的新的视图iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序尽管如此,实际开发中,我们还需要自定义视图.积累自己的代码库,方便开发.自己封装的视图,能像系统UI控件一样,用于比别的项目中,能大大降低开发成本,提高开发效率.——————>自定义视图的步骤 根据需求的不同,自定义视图继承的类也有所不同,一般自定义的视图会继承于UIView ,以下是自定义视图的要点:1>创建一个UIView子类2>在类的初始化方法中添加子类图3>类的.h文件提供一些接口(方法 ) ,便于外界操作子视图———————>label - textField 视图 假设我们使用LTView 类代表label - textfield 视图我们创建一个LTView 类继承与UIView// 创建一个view类继承与UIView ,声明一些属性变量 用于外界接口用 #import <UIKit/UIKit.h>

@interface LTView : UIView //接口 方便外部操作 @property(nonatomic,retain)UILabel *label;

@property(nonatomic,retain)UITextField *textField; //按钮接口 @property(nonatomic,retain)UIButton *button; @end 我们将LTView 作为一个容器 ,在LTView 的初始化方法中创建并添加label 和textField//在view实现文件中初始化( 固定写法 ) 在初始化中 创建并添加label 和 textField #import "LTView.h"

@implementation LTView //固定初始化方法 -(id)initWithFrame:(CGRect)frame

{

//frame 要重写

self = [super initWithFrame:frame];

if( self ) {[self addAllViews]; }

return self;

}

//自己写的方法

-(void)addAllViews

{

_label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 60, 30)];

_label.backgroundColor = [UIColor blueColor];

[self addSubview:_label];

// _label.text = @"QQ";

// _label.textAlignment =NSTextAlignmentCenter;

_textField = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_label.frame)+20, CGRectGetMinY(_label.frame), CGRectGetWidth(_label.frame)+100, CGRectGetHeight(_label.frame))];

_textField.backgroundColor = [UIColor greenColor];

[self addSubview:_textField];

}

@end 此时的LTView 就变成了一个具有label 和textField 的视图了//然后再 AppDelegate .m 中 ,利用我们创建的LTView 类创建它的实例对象/ ——————>LTView 控制 把label 和 Textfield 封装到LTView 中 ,在一定程度上简化了我们代码往往我们需要对LTView 中的label 或者textfield进行一定的控制,比如:设置label的text ,获取Textfield 的 text ,给Textfield 指定delegate ,设置textColor ...为了方便外界操作label和Textfield ,因此我们要为外界提供一些方法 ———>小节 : 自定义LTView 使用了一种设计模式:复合设计模式复合设计模式: A类中,使用B类(或者更多类) 作为自己的成员(实例变量)iOS中复合是特别常见的设计模式,ios新控件往往都是自己已有控件组合而成的二>视图控制器指定自定义view UIViewController : 视图控制器控制视图显示,响应事件分担APPDelegate 的工作实现模块独立,提高复用性—————>视图控制器的功能 控制视图大小变换,布局视图,响应事件检测以及处理内存警告检测以及处理屏幕旋转检测视图的切换——————>MVC 概述: UIViewController : 是MVC 设计模式的核心MVC是一个框架级 的设计模式M 是Model ,主要用于建立数据模型( 即数据的结构 )V 是View ,我们能看到的所有控件都是view ,view主要的功能是展示数据 .C是控制器 ,主要是控制M和V的通信是用MVC 系统的可维护型 ,可扩展性增强———————> 使用视图控制器 定以UIViewController 的子类 ———> RCViewController创建视图控制器对象 ,作为window的根视图控制器在viewDidload 中 使用默认创建好的视图对象view//1>

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[_window makeKeyAndVisible];

//2>创建视图控制器

RCViewController *rcc = [[RCViewController alloc] init];

//首先我们window自带了一个视图控制器也就是根视图控制器

//3>将我们创建的rcc 代替我们的跟视图器 (rootViewController) self.window.rootViewController = rcc; —————————>视图控制器指定自定义view 为什么使用自定义视图类呢?? UIViewController 自带一个空的view,与需求不符合视图控制器只负责控制视图显示,响应事件如何显示?? 自定义视图类继承UIView ,在初始化方法中添加子视图控件重写controller 的 loadView 方法,创建自定义视图对象,并指定为controller 的view将子视图控件对象设置为自定义视图类的属性, 在viewDidLoad 方法中进行设置:添加action ,设置delegate...在controller 中添加按钮点击事件实现和代理方法的实现 三>检测屏幕旋转 视图控制器本身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写几个方法: 1> supportedInterfaceOrientations —> 设置设备支持旋转的方向2>willRotate( 旋转 ) ToInterfanceOrientations : duration(时间 ) : —> 暂停音乐 ,关闭视图交互....3> willAnimate( 使…有活气 ) ROtation ToInterfanceOrientation : duration : ——> 添加自定义动画....4>did RotateFromInterfaceOrientation : ——> 播放音乐,打开视图交互...——————>视图处理 注意视图控制器会自动调整view 的大小以适应屏幕旋转 ,bounds 被修改,触发view 的layoutSubviews方法view重写layoutSubviews方法 ,根据设备方向,重新布局[UIApplication share( 分配 )Application ] .status( 状态 )BarOrientation 提供设备当前方向 四>处理内存警告 控制器能监测内存警告 ,以便我们避免内存不够引起的crash 在定义的controller子类中重写didReceive(接收) MemoryWarning 方法 释放暂时不适用的资源( 数据对象,图像 .. ) , 把不要的视图都放到这里释放 : //程序内存超过了应用程序规定的法值就会执行 (程序)

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

//可以打印看 ,可以吧不要的视图放在这里面就释放掉了

NSLog(@"%s,%d",__FUNCTION__,__LINE__);

// Dispose of any resources that can be recreated. } 五>容器视图控制器 ———>常用方法 self . view 显示 : viewWillAppear : 和 viewDidAppear ://视图将要出现

-(void)viewWillAppear:(BOOL)animated

{

//要用父类的调用

[super viewWillAppear:animated];

NSLog(@"%s,%d",__FUNCTION__,__LINE__);

}

//视图已将出现

-(void)viewDidAppear:(BOOL)animated

{

[super viewDidAppear:animated];

NSLog(@"%s,%d",__FUNCTION__,__LINE__); } self . view 消失 : viewWillDisapper : 和 viewDIdDisapper ://视图将要消失

-(void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];

NSLog(@"%s,%d",__FUNCTION__,__LINE__);

}

//视图已经消失

-(void)viewDidDisappear:(BOOL)animated

{

[super viewDidDisappear:animated];

NSLog(@"%s,%d",__FUNCTION__,__LINE__); } 当self .view 添加到父视图上时, 执行appear 方法 ,当self.view 从父视图上移除是,会执行 disappear 方法 ————> 演示执行顺序 1>定义FirstViewController ,SecondViewController 类 , first 作为window 的根视图控制器 , 2>将SecondViewController 的view 添加到FirstViewController 的view 上 3> 将SecondViewController 的view 移除 ———/>SecondViewController :第二个视图控制器 4>查看SecondViewController 中4个方法的执行顺序 ——> 总结 : iOS 提供了很多标准组件 ,标准组件完成我们的需要,但是适当的封装 ,组合一个新的控件无疑能给我们带来效率上的提高, 视图控制器是MVC 中的C ,用于处理视图触发的事件, 处理旋转和内存呢警告

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。