如何封装一个既可以纯代码写的也可以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.两者的只能其一
initWithFrame和initWithCoder只可能调用其中的一种。
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
- 如何封装一个既可以纯代码写的也可以xib拖拽的自定义控件
- 在xib上拖进一个scrollView,设置contentsize之后可以滑动,再往其上拖上控件之后就不能滑动,控件用代码写的就可以
- 纯代码封装自定义View和XIB封装自定义View的区别
- 超好的纯js日期控件 可以自定义样式
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View
- android 一个可以自定义的进度条控件
- 如何写一个可以展开的TextView
- 一个可以拖动的自定义Gridview代码
- 用xib自定义 可以在xib中使用的view
- swift 纯代码、xib自定义控件
- android如何写一个自定义的dialog可以在Title的位置弹出来
- iOS 自定义控件--纯代码或者xib&storyBoard 系统会调用的方法
- 一个简单的二级联动效果,看完之后立马你也可以写一个(有源码,纯js,带注释)
- 自定义可以旋转的控件
- 如何实现ListView 不写adpater也可以看到,也可以在布局界面看到listview的效果
- 一个自定义的可以分页,排序,扩展显示grid控件
- 用js写一个可以拖拽的浮动窗口
- 哈工大ACM题目
- hdu 1290 切蛋糕
- Excel表格技巧合集,让你工作效率翻一倍!新技能get√
- JS实现重建二叉树
- 如何做用户行为路径分析?
- 如何封装一个既可以纯代码写的也可以xib拖拽的自定义控件
- android手动 v2 签名
- HTML5中a标签的锚点使用
- eclipse3.7 安装 maven
- Koltin-用法总结
- NOIP2017提高组 模拟赛21(总结)
- 2017新零售与人工智能论坛— Focussend浅谈智能化营销如何助力重构零售消费场景
- 恩智浦IMX6开发板选哪家?迅为imx6开发板平台运行怎么样?
- 德式秘籍:产品总监最该学会的管理方法是什么?(一)