纯代码/xib 自定义控件

作者: 小码码 | 来源:发表于2016-10-07 23:03 被阅读255次

1 纯代码的方式

  • 新建一个继承自UIView的类

  • 在init方法中添加子控件

  • 在layoutSubviews方法中设置子控件的frame(一定要调用[super layoutSubviews])

  • 提供一个模型属性,重写模型属性的set方法

  • 在set方法中,取出模型属性,给对应的子控件赋值


// 纯代码时,用init方法

- (instancetype)initWithFrame:(CGRect)frame

{

if (self = [super initWithFrame:frame]) {

// 添加图片

UIImageView *iconImageView = [[UIImageView alloc] init];

iconImageView.backgroundColor = [UIColor yellowColor];

[self addSubview:iconImageView];

self.iconImageView = iconImageView;

// 添加文字

UILabel *nameLabel = [[UILabel alloc] init];

nameLabel.backgroundColor = [UIColor purpleColor];

nameLabel.textAlignment = NSTextAlignmentCenter;

[self addSubview:nameLabel];

self.namelabel = nameLabel;

}

return self;

}

/**

*  布局子控件,设置子控件的frame

*/

- (void)layoutSubviews

{

// 这里一定要调用super

[super layoutSubviews];

CGFloat shopW = self.frame.size.width;

CGFloat shopH = self.frame.size.height;

self.iconImageView.frame = CGRectMake(0, 0, shopW, shopW);

self.namelabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);

}

/**

*  设置数据

*/

- (void)setShop:(XMGShop *)shop

{

_shop = shop;

self.iconImageView.image = [UIImage imageNamed:shop.icon];

self.namelabel.text = shop.name;

}

2 加载xib的方式


// 方式1:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test" owner:nil options:nil];

// 方式2:

UINib *nib = [UINib nibWithNibName:@"Test" bundle:nil]; // nil 默认是mainBundle

NSArray *array = [nib instantiteWithOwer:nil object:nil];

  • 通过xib自定义控件的步骤

  • 创建一个xib文件

  • 新建一个继承自UIView的类,管理该xib文件,xib的文件名最好与类名一致

  • 修改xib中父控件的class为控件类名

  • 将子控件进行连线

  • 在set方法中给子控件设置数据

  • 提供模型属性,重写模型的set方法

3 初始化方法

(1)凡是通过代码创建控件的时候,会调用方法- (instancetype)initWithFrame:(CGRect)frame


- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

NSLog(@"initWithFrame");

}

return self;

}

(2)凡是通过xib,stroyboard 创建控件的时候,就会调用方法- (instancetype)initWithCoder:(NSCoder *)coder


- (instancetype)initWithCoder:(NSCoder *)coder

{

self = [super initWithCoder:coder];

if (self) {

NSLog(@"initWithCoder");

//注意:在此方法中不能获得子控件

//        NSLog(@"%@", self.iconView);

}

return self;

}

(3)凡是通过xib,stroyboard 创建控件之后,就会调用方法- (void)awakeFromNib


- (void)awakeFromNib {

//在此方法中一定要调用[super awakeFromNib];

//可以在此方法中对子控件进行初始化操作

[super awakeFromNib];

NSLog(@"awakeFromNib");

NSLog(@"==%@", self.iconView);

}

相关文章

  • XIB和代码自定义控件的步骤

    title : XIB和代码自定义控件的步骤category : UI 代码和XIB自定义控件和封装子控件的步骤...

  • 5.等高的cell设置

    1.内容大纲: 2.纯代码,添加子控件 项目初始准备: 创建自定义的cell: 3.自定义等高的cell--xib...

  • 纯代码/xib 自定义控件

    1 纯代码的方式 新建一个继承自UIView的类 在init方法中添加子控件 在layoutSubviews方法中...

  • xcode直接给xib,sb内控件添加圆角等属性

    纯代码设置Button或者其他View的边框属性 以下提供自定义控件的时候,使用Xib,或者用sb来进行布局,那么...

  • 如何用Swift创建自定义iOS控件

    本文将分两个部分内容:基于代码的自定义控件和基于XIB的自定义控件。 基于代码的自定义控件 实现的基本步骤(纯文字...

  • 控件篇

    1、创建控件的几种方式: 纯代码创建Xib创建Storyboard创建 2、纯代码创建View时的生命周期 -(v...

  • UILabel与UITableViewCell的自适应

    1.UILabel 的自适应(1)无其他控件,使用纯代码 (2)有其他控件,所有控件都用xib布局,此时我们需要自...

  • UI-Xib

    Xib的加载 方法1 方法2 自定义控件view的步骤 新建自定义控件类 修改xib中view的类名 封装xib的...

  • iOS开发 自定义TableViewCell、XIB.纯代码(r

    一、不使用xib(纯代码)1.重写自定义cell的initWithStyle:withReuseableCellI...

  • iOS使用Xib自定义控件

    使用xib自定义一个简单的控件 XMGShopView xib效果图: 运行时效果图: xib自定义控件的创建方法...

网友评论

本文标题:纯代码/xib 自定义控件

本文链接:https://www.haomeiwen.com/subject/xffuyttx.html