UI基础之frame模型的使用

知识点(一):关于重写构造方法的三种方式的思考:

- (instancetype)init
{
    self = [super init];
    if (self) {
         NSLog(@"%s",__func__);
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"%s",__func__);
    }
    return self;
}
/**
 *  代码为什么要写在initWithStyle 方法中
 *
 * 当代码是提供给别人使用的时候,一定要充分考虑别人会怎么使用
 *  要保证自己的代码,无论别人怎么去调用,都能调用到
 */
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        NSLog(@"%s",__func__);
    }
    return self;

}

1.当调用的时候,假设对象是p,那么[[p alloc]init]的时候

调用顺序和结果为:

2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:07.737 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:07.738 11-微博[2376:644294] -[HMWeiboCell init]
2017-05-03 17:30:08.110 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:08.111 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:08.113 11-微博[2376:644294] -[HMWeiboCell init]
2017-05-03 17:30:08.116 11-微博[2376:644294] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:30:08.117 11-微博[2376:644294] -[HMWeiboCell initWithFrame:]
2017-05-03 17:30:08.118 11-微博[2376:644294] -[HMWeiboCell init]

结果显示为三种方法都会被调用

2.当[[p alloc]initWithFrame:CGRectZero];的时候

调用顺序和结果为:

2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.351 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]
2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.409 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]
2017-05-03 17:37:26.410 11-微博[2405:649389] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:37:26.411 11-微博[2405:649389] -[HMWeiboCell initWithFrame:]

3.当[[p alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseId];的时候:

调用顺序和结果为:

2017-05-03 17:38:42.427 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:38:42.463 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]
2017-05-03 17:38:42.464 11-微博[2424:651531] -[HMWeiboCell initWithStyle:reuseIdentifier:]

知识点(二)cell中会经常碰到[self.contentView addSubview:nameLabel]和[self addSubview:nameLabel]

一般我们向cell中添加子视图,有两种方式

[cell addSubview:]
[cell.contentView addSubview:]  

区别在于进行cell编辑时,比如cell内容向左移或者右移时,第一种方式子视图不会移动,第二可以,所以这种情况一般使用第二种方式。

还有在设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentCell设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。

其实这两种方式在大多数情况是一样,不用纠结。

但一般情况下会添加到contentView上,可以这样理解:cell本身是个view,在cell上有一层透明的contentView

时间: 2024-11-08 19:05:05

UI基础之frame模型的使用的相关文章

iOS开发UI基础—字典转模型(部分内容转载他人)

iOS开发UI基础-字典转模型 开发中,通常使用第三方框架可以很快的实现通过字典转模型,通过plist创建模型,将字典的键值对转成模型属性,将模型转成字典,通过模型数组来创建一个字典数组,通过字典数组来创建一个模型数组等等. 一.能完成功能的"问题代码" 1.从plist中加载的数据 2.实现的代码 1 // 2 // LFViewController.m 3 // 03-应用管理 4 // 5 // Created by apple on 14-5-22. 6 // Copyrigh

UI基础字典转模型

一:字典转模型好处 1.使用字典的坏处 手敲字符串key,key容易写错 Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据 不面向对象 2.使用对象的好处 面向对象,对象把显示世界中的内容抽象到程序的世界,更直观,更接近人类的语言 所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性 使用模型访问属性时,编译器会提供一系列的提示,提高编码效率 二:1

OS开发UI基础—手写控件,frame,center和bounds属性

OS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4)如果是button等控件,还需考虑控件的单击事件等 (5)注意:View Contollor和view的关系 2.注意点 在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力! 设置控件监听方法的示例代码如下: [btn addTarget:sel

ios开发-UI基础-超级猜图

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 本篇文章介绍一个比较综合的小应用----超级猜图. 功能分析: 根据显示的图片,在下面的待选项按钮中选中正确答案按钮,选中的按钮会显示在正确答案按钮中 答案错误,答案颜色变为红色,分数减小 答案正确,答案颜色变为蓝色,两秒自动跳入下一题,分数增加 点击"下一题"可以进入下一个题目 点击"大图",可以放大显示图片,再次点击图片或者背景,图片缩小至原来大小 点

ios开发-UI基础-应用管理(单纯界面)改进5-使用代理实现监听下载按钮的点击(delegate)

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 前几篇文章介绍了一个应用管理的小应用,从最开始的单纯实现功能,一步一步就行改进\封装,上篇文章是使用xib进行了优化,本篇文章使用代理实现监听下载按钮的点击. 在原来的基础上,使用代理的主要思路分析: 首先要新建一个协议 声明协议的要实现的方法(一般为optional) 声明一个遵守该协议的代理的属性 使用代理,通知其代理完成操作 在代理中的实现步骤: 遵守协议 设置代理(一般通过拖线

iOS开发UI基础—xib的简单使用

iOS开发UI基础-xib的简单使用 一.简单介绍 xib和stotyboard的比较,一个轻量级一个重量级. 二.xib的简单使用 1.建立xib文件 建立的xib文件命名为appxib.xib 2.对xib进行设置 根据程序的需要,这里把view调整为自由布局 建立view模型(设置长宽等参数) 调整布局和内部的控件 完成后的单个view 3.使用xib文件的代码示例 YYViewController.m文件代码如下: 1 // 2 // YYViewController.m 3 // 10

iOS开发UI基础—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

ios开发UI基础-使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片) 3.提供2个模型 数据模型:

iOS开发UI基础—从代码的逐步优化看MVC

iOS开发UI基础-从代码的逐步优化看MVC 一.要求 要求完成下面一个小的应用程序. 二.一步步对代码进行优化 注意:在开发过程中,优化的过程是一步一步进行的.(如果一个人要吃五个包子才能吃饱,那么他是否直接吃第五个,前面四个不用吃就饱了?) 1.完成基本要求的代码(使用了字典转模型和xib连线) (1)文件结构 (2)主要代码 字典转模型部分: YYappInfo.h头文件 1 // 2 // YYappInfo.h 3 // 12-视图改进(1) 4 // 5 // Created by

ios开发-UI基础-应用管理(单纯界面)改进2

本篇文章,通过字典转模型来改进上篇文章中的代码. 字典转模型,之前的文章已经介绍过,这里再重复一下:  字典转模型 字典:用来存储数据的,用键值对存储数据,是一个nsdictionary ,(不好处:key值容易写错) 模型: 用来存储数据的,一个字典对应一个模型,模型用属性来存储数据,是一个纯洁的object对象 @property(nonatomic,copy)NSString *name; @property(nonatomic,copy)NSString *icon; 字典转模型:一个字