如何封装一个既可以纯代码写的也可以xib拖拽的自定义控件

来源:互联网 发布:mac系统占用100g 编辑:程序博客网 时间:2024/05/19 15:25

1.纯代码方式创建控件

  

   不管是init方法创建还是initWithFrame方法,都会去调用initWithFrame方法。因为就算是用init方法创建,这个时候也会去调用initWithFrame方法。

2.xib或者storyboard创建控件

 

    如果我们用xib或者storyboard拖拽的方式创建控件,然后关联指定的类,就会initWithCoder方法通过解析xib的配置去创建控件,如果xib初始化完成之后会调         用awakeFromNib方法,所以在这个方法中去做处理,会保证IBOutlet不为空。

3.两者的只能其一

  

      initWithFrameinitWithCoder只可能调用其中的一种。

4.两者的联系

     为了不管是纯代码或者xib拖拽都可以使用这个封装的子控件,应该写一个单独的初始化控件的方法initMySubViews,并且在这两个方法中中进行调用。而layoutSubviews都会调用的,所以可以在这个方法中重新摆放子控件的位置,调用方法resetMySubViewsFrame


5.示例代码


#import "myView.h"@interface myView()@property UIButton *btn;@end@implementation myView- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        [self initMySubViews];    }    return self;}- (instancetype)initWithCoder:(NSCoder *)coder{    self = [super initWithCoder:coder];    if (self) {        [self initMySubViews];    }    return self;}-(void)awakeFromNib{    [super awakeFromNib];   }-(void)layoutSubviews{    [super layoutSubviews];    [self  resetMySubViewsFrame];        }-(void)initMySubViews{    _btn=[[UIButton alloc] init];    [_btn setBackgroundColor:[UIColor redColor]];    [self addSubview:_btn];}-(void)resetMySubViewsFrame{     _btn.frame=CGRectMake(0,0, self.frame.size.width/2, self.frame.size.height/2);    }


实例源码下载链接



阅读全文
0 0
原创粉丝点击