IOS每天15个注意点系列之UI-应用管理

来源:互联网 发布:网络电视没信号怎么调 编辑:程序博客网 时间:2024/06/10 05:38
<1>创建数组存储数组源数据:
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@“app.plist” ofType:nil];
NSArray *sourceArr = [NSArray arrayWithContentsOfFile:path];
以上三句也可以简写为一句:
NSArray *sourceArr =[NSArray arrayWithContentsOfFile: [[NSBundle bundle] pathForResource:@“app.plist” ofType:nil]];
<2>创建一个类似APP应用下载的界面:
(1)设置间距:CGFloat padding ;
  (2)   循环创建appView
for (int i = 0;i<sourceArr.count;i++)//此循环主要为了遍历数组源数据中的图片和text
{
1.计算appView水平坐标
CGFloat appViewX = padding +(i%cnt)*(padding + width));//cnt表示界面每行显示的应用数。
2.每一个app应用对应着一个UIView
3.设置view的frame
4.设置view的背景图片或者text.
5.添加到控制器的view中(4.7寸屏幕:375*667);
(3)添加app块的子控件
3.1创建应用图标 —UIImageView,添加子控件到app块[appView addSubview:iconView];
3.2创建应用程序说明标签//tag本身不直观,tag改变,代码也要跟着改,以后很少用
3.3 修改对齐方式:
     nameView.textAlignment = NSTextAlignmentCenter
    设置字体大小:
    nameView.font = [UIFont systemFontOfSize:13];
3.4.设置按钮的文本,只设置UIControlStateNormal如果没有设置其他状态下的文本,那么其他状态下默认是这个效果。
[downView setTitleL@“下载” forState:UIControlStateNormal];
设置背景图片[downView setBackgroundImage:[UIImage imageNamed”@“button”] forState:UIControlStateNormal];
设置字体大小--无状态
downView.titleLabel.font = [UIFont systemFontOfSize:13];
3.5为子控件设置数据:
1.先取出字典数据:NSDictionary *dict = sourceArr[i];
nameView.text = dict[@“name”];
iconView.image[UIImage imageNamed:dict[@“icon]];
<3>代码问题:
[1].如果一开始就把数据加载到内存中,数据不运行也加载,这样就浪费了内存空间
解决方案:延迟加载(懒加载):用到的时候再进行加载,节省内存无谓的消耗
(1)优点:节省内存无谓的消耗,保证加载到内存中的数据是有用的,只加载一次。
(2)缺点:用到的时候再加载,需要去获取去获取需要的数据,降低效率。
懒加载的本质就是重写getter方法.
实施过程:
1.创建全局的数组变量。
2.重写getter方法.
[2]控制器时view和model的交互桥梁,它并不关乎数据是如何创建的,也不关乎数据是如何显示的。所以我们需要将数据的创建过程封装起来.
实施过程:
1.创建自定义类-model-NSObject。
2.成员组成:
(1)有一个方法返回当前数组,这个方法是类方法,将数据源的获取封装在这个方法里面:
 (2)返回当前对象的类方法,参数是传进来的字典.
(3)返回当前对象的对象方法.参数是传进来的字典
3.字典转模型:
1.使用字典的缺点:如果key写错,不会有提示,修改的话要写改很多地方.
2字典转模型-对象-实体类对象
对象方法:返回当前模型对象
- (instancetype)initWithDic:(NSDictionary *)dic
{
if (self = [super init])
{
self.name = dic[@“name”];
self.icon = dic[@“icon];
 }
return self;
 }
类方法:返回当前模型对象
+ (instancetype)appWithDic:(NSDictionary *)dic
{
return [[self alloc] initWithDic:dic];
 }
返回当前plist文件中的数据,先以字典的形式存在数组中,然后将字典转换为模型
+ (NSArray *)apps //名字要与 plist文件名相似.
{
NSArray *source = [NSArray arrayWithContentsOfFile:[[NSBundle bundle] pathForPath:@“app.plist”] ofFile];
NSMutable *desArr = [NSMutableArray Array];
for (NSDictionary *dic in source)
{
APP *app = [APP appWithDic:dic];
[desArr addObject:app];
 }
return desarr;
}
封装模型类的总结:
a.成员:类方法返回当前所有模型对象
b.类方法返回当前对象
c.对象方法返回当前对象
d.对应plist文件key的属性.
<4>使用xib文件
1.xib是一个描述文件,它可以拖控件
2.它是用来描述一些结构固定的块:子控件确定
3.如何创建:在UserInterface创建一个empty文件
修改xib文件的大小:size:freeform
<5>当然,xib文件也要进行封装,controller只想要数据,并不在乎怎么得到的.
1.返回当前自定义的view
2.重写setter方法为自定义的view赋值.
细节
1. 自定义类用来做什么操作,或者描述什么对象,那么它的类型就应该是所描述的对象的类型:Subclass of UIview
2.通过封装方法返回的自定义的view类型不再是UIView,而是自定义的类型
3.连线要连到当前view所制定的类中
<6>将plist文件加载到Supporting Files中,之后调用不需要导入文件,否则会出错。
<7>为什么使用xib文件,在描述一些固定块的时候开发效率更高,不需要使用大量的代码来生成,它更简易.
<8>xib文件就是类似于storyboard一样的UI界面,我们可以往上面添加我们想使用的控件。本质是一个xml文件,用来描述一些用户界面及相关控件数据的,既然是一个物理文件,那么久需要进行物理文件数据的读取。
<9>通过viewWithTag方法来获取指定tag的子控件,注意的是,这个方法返回的事UIView类型,需要添加一个类型转换,否则会有警告。
<10>使用自定义的类描述xib文件,一定要将xib文件的class属性修改为自定义的类,否则不能进行连线。
<11>用loadNibNamed读取xib文件的时候,文件名不要加后缀,这是规定.
<12>Option + cmd + 回车 打开辅助视图. cmd + 回车 取消辅助视图
<13>.cmd + 0 打开或者取消左边的导航栏option + cmd 0 打开或者取消右边的属性视图
<14>UIView常用类方法//将一个视图移到前面  bringSubviewToFront:  //将一个视图推送到背后  sendSubviewToBack:  
<15>rectangle bounds 矩形尺寸 wrapping换行   technique方法    familiar style简体

0 0