控件通过xib,storyboard创建,初始化设置一定会调用initWithCoder

awakeFromNib 加载完毕的时候肯定会调用

layoutSubviews 布局子控件 位置和尺寸

利用代码证实

先创建wlisView.xib 拖两个控件 imageView 和 Label

创建一个类 wlisView.h  并且让wlisView.xib 自定义类 class  wlisView

在wlisView.h 声明一个类方法

+(instancetype)wlisViewWith;

在wlisView.m文件中实现改方法   并且连线 xib中的两个子控件

#import "wlisView.h"

@interface wlisView ()
/**
连线xib中UIImageView
*/
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
/**
连线xib中UILabel
*/
@property (weak, nonatomic) IBOutlet UILabel *lab; @end
@implementation wlisView /**
重写initWithCoder方法
*/
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self=[super initWithCoder:aDecoder]) {
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
}
return self; }
-(void)layoutSubviews{
[super layoutSubviews];
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
}
-(void)awakeFromNib{
[super awakeFromNib];
/**
打印
*/
NSLog(@"%s",__func__);
NSLog(@"self.frame-%@",NSStringFromCGRect(self.frame));
NSLog(@"self.imgView-%@",NSStringFromCGRect(self.imgView.frame));
NSLog(@"self.lab-%@",NSStringFromCGRect(self.lab.frame));
} /**
创建
*/
+(instancetype)wlisViewWith{
//读取跟类文件中相同名称的xibNSStringFromClass(self) 并且创建
return [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass(self) owner:nil options:nil]lastObject]; }
@end

wlisView.m

在ViewController创建

#import "ViewController.h"
#import "wlisView.h"
@interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
wlisView * wl=[wlisView wlisViewWith];
[self.view addSubview:wl];
}
@end

ViewController

打印输出结果:

个人认为记住一个方法就好了,那就是layoutSubviews 这个方法

因为这个方法是苹果为我们准备更改控件的 为什么不用

xcode initWithCoder\awakeFromNib\layoutSubviews的更多相关文章

  1. initWithNibName&initWithCoder &awakeFromNib&UIView常见属性方法

    第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第 二.initWithCoder 是一个类在IB中创建 ...

  2. init,initialize,initWithFrame,initWithCoder,awakeFromNib等区别

    1.init 与initialize 对于iOS程序,创建几个类对象,就会调用几次init.下面分别重写 举例如下: 创建一个Person类,分别重写initialize和init方法 #import ...

  3. iOS initWithFrame、initWithCoder、awakeFromNib的区别解析

    当我们需要自定义一个View控件时,会有 initWithFrame.initWithCoder.awakeFromNib 这三个系统方法,关于这三个方法何时调用,如何调用,有时候可能很多人会弄混淆. ...

  4. iOS中View生命周期与布局

    生命周期 说到view的生命周期一般都是指视图控制器的view生命周期. view的创建:loadView 视图控制器(UIViewController)及其子类,无论是手写代码还是storyboar ...

  5. iOS viewController 和 view 的创建消失生命周期总结

    控制器创建的生命周期 1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, loadView,viewDidLoa ...

  6. UIScrollView入门与框架设计

    一.概述 1.UIScrollView的contentSize, contentOffSet, contentInsets的作用和使用. 2.UIScrollView的一整个滚动过程的生命周期(开始滚 ...

  7. iOS:viewController 和 view 的生命周期、不错的代码设计风格

    一.介绍: viwe和viewController的生命周期是最基本的知识,如果很好地理解它们的方法调用的执行顺序,就能很好地设计代码的风格.这篇博客转载自:http://www.cnblogs.co ...

  8. UIViewController生命周期-完整版

    一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load   (NSObje ...

  9. VIEWCONTROLLER的启动流程

    转载自:http://sunnyyoung.net/post/ios/2015-04-22-viewcontrollerde-qi-dong-liu-cheng-yu-jie-xi VIEWCONTR ...

随机推荐

  1. MySQL二进制日志中保存的上下文信息

    1.二进制日志中要保存上下文的原因 二进制日志是要在slave端重放的,记录上下文信息,是为了保证主丛数据库的一致.如rand一个随机数,在主上返回的可以有是100,在从上返回的可能就是1000了. ...

  2. Oracle系列:记录Record

    Oracle系列:记录Record   分类: [Oracle] (15) 版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle系列:记录(Record) 一,什么是记录(Record) ...

  3. Matlab 之meshgrid, interp, griddata 用法和实例

    http://blog.sina.com.cn/s/blog_67f37e760101bu4e.html 实例结果http://wenku.baidu.com/link?url=SiGsFZIxuS1 ...

  4. 将Python代码嵌入C++程序进行编写

    将Python代码嵌入C++程序进行编写的实例,python嵌入 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加“Py ...

  5. css Block formatting context BFC

    w3c关于BFC解释: http://www.w3.org/TR/CSS21/visuren.html#block-formatting Mdn描述: A block formatting conte ...

  6. commons-lang 包常用方法

      package com.java.utils; import java.util.Iterator; import java.util.Map;   import org.apache.commo ...

  7. Kettle 连接失败 Oracle 数据库报 ora-12505 的解决方法(转)

    用kettle新建DB连接的时候总是报错,可是用plsql连接是可以连上,错误信息大致如下: 错误连接数据库 [MIS] : org.pentaho.di.core.exception.KettleD ...

  8. CentOS 6.2图形界面自定义开启终端快捷键

    菜单: System->Preferences->Keyboard Shortcuts 在Desktop分类下找到"Run a terminal" 点击Run a te ...

  9. win7(32 bit) 环境下点击打印预览报错解决办法

      如题,报错截图如下   :     解决办法如下: 1.关闭系统数据执行保护.具体操作: 在win7 系统命令行中执行如下命令: bcdedit.exe /set {current} nx Alw ...

  10. Object-c的一些基本概念

    自学了一个多月的IOS,对Object-C也有了初步的认识,也有很多观点不知道是否正确,所以整理了一下,和小伙伴们分享分享 1.OC中使用的消息机制代替调用方法 区别:使用消息结构的语言,其运行时缩引 ...