initWithCoder、awakeFromNib、initWithFrame

  首先,创建一个UIView对象有两种方法:IB方式和编码方式。

1、IB(Interface Builder)方式:即从nib文件中加载视图,此时会调用该view对象的initWithCoder方法,接着调用awakeFromNib方法

CMButton *button = [[[NSBundle mainBundle] loadNibNamed:@"CMViewController" owner:self options:nil] lastObject];
//此句会调用button的initWithCoder、awakeFromNib方法

另外在"CMViewController.nib"第一次被加载时,会像该nib文件中的所有对象发送initWithCoder、awakeFromNib消息,即每个对象的initWithCoder、awakeFromNib方法各调用一次。

2、编码方式,即用代码创建view对象,会调用对象的initWithFrame方法

CMButton *button = [[CMButton alloc] init];
//此句会调用button的initWithFrame方法
时间: 2024-10-14 04:48:51

initWithCoder、awakeFromNib、initWithFrame的相关文章

initWithFrame、initWithCoder、awakeFromNib的区别和调用次序 & UIViewController生命周期 查缺补漏

当我们创建或者自定义一个UI控件时,就很可能会调用awakeFromNib.initWithCoder .initWithFrame这些方法.三者的具体区别如下: initWithFrame: 通过代码创建UI控件的时候就会调用: initWithCoder:从文件中解析一个对象的时候就会调用这个方法,也就是说无论是通过代码还是xib,程序运行的时候都会调用这个方法: awakeFromNib:当一个对象从xib或者storyboard中加载完毕后,就会调用一次. 比如:当苹果官方提供的按钮不能

iOS initWithFrame、initWithCoder、awakeFromNib的区别解析

当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. 下面我会就理论结合代码举例来说明一下: 1.initWithFrame - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSLog(@"initWithFra

initWithFrame 与 initWithCoder 、awakeFromNib 的方法理解笔记

有时候,知道initWithFrame方法如何用,但是么有弄明白initWithFrame方法到底是什么? 那就通过查资料弄明白. 1. initWithFrame方法是什么? initWithFrame方法用来初始化并返回一个新的视图对象,根据指定的CGRect(尺寸). 当然,其他UI对象,也有initWithFrame方法,但是,我们以UIView为例,来搞清楚initWithFrame方法. 2.什么时候用initWithFrame方法? 简单的说,我们用编程方式申明,创建UIView对

awakeFromNib、initWithCoder、initWithFrame三者区别

(1)awakeFromNib和initWithCoder:差别awakeFromNib 从xib或者storyboard加载完毕就会调用initWithCoder: 只要对象是从文件解析来的,就会调用同时存在会先调用initWithCoder: (2)initWithCoder: & initWithFrame:initWithCoder:使用文件加载的对象调用(如从xib或stroyboard中创建)initWithFrame:使用代码加载的对象调用(使用纯代码创建)注意:所以为了同时兼顾从

initWithNibName、initWithCoder、awakeFromNib和 loadNibNamed详解

第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第二.initWithCoder 是一个类在IB中创建但在xocde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xcode中通过 initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用.或者是一个view的nib文件,类似方法创建时调用ini

[Stanford 2011] UIView、协议、手势识别

1.Autorotation 自动旋转时controller发生了什么?一是controller的view在controller允许的时候调整frame,方法shouldAutorotateToInterfaceOrientation返回controller是否允许view自动根据设备旋转而旋转.自动旋转接口包括竖直.上下颠倒.左横向和右横向这4种情况.只要在controller里实现这个方法就ok.   不管支持的是哪个方向,旋转的时候view的bound会改变,子view的frame会变,子

2015 IOS tabelView分组、Xib、Cell——在蓝懿教育 学习笔记

TabelView分组.表头,表尾 删除vc 搭建tvc 分组界面中return 2 分2组: 在控制行加判断 如果section== 1  return10 (此时012 0123456789) 在sb中选中tv在style右样式改成Grouped 此时有了间隔 控制分组题头和尾.有个字符串 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return @"我

ios UIWebView 加载网页、文件、 html

UIWebView  是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法,1.通过storyboard 拖拽 2.通过alloc init 来初始化 创建webview,下列文本中 _webView.dataDetectorTypes = UIDataDetectorTypeAll; 是识别webview中的类型,例如 当webview中有电话号码,点击号码就能直接打电话 - (UIWebView *)webView

iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

-- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事件(手势操作).运动事件.远程控制事件等展开学习: iOS事件简介 触摸事件 手势识别 运动事件 远程控制事件 iOS事件 在iOS中事件分为三类: 触摸事件:通过触摸.手势进行触发(例如手指点击.缩放) 运动事件:通过加速器进行触发(例如手机晃动) 远程控制事件:通过其他远程设备触发(例如耳机控制