UIiOS-进阶学习iOS专题

iOS笔记-自定义控件(OC)

2016-01-24  本文已影响3549人  Developer_Yancy
随机配图

导读:

iOS开发中,很多时候系统提供的控件并不能很好的满足我们的需求,因此,自定义控件便成为搭建UI界面中必不可少的一部分。本篇博文以笔记的形式,总结了自定义控件的两种方式以及每种方式的实现步骤,虽简略却不简单,因此希望留给读者更多的思考空间。作为入门的编程学习者,独立思考能力和动手编程能力都是至关重要的。在此,希望大家学习愉快,共同进步。

自定义控件之xib方式

    NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil]`
- 方式二:通过`UINib`    `nibWithNibName`加载
UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
- (void)viewDidLoad {
    //1.通过mainbundel获取xib文件,返回组件数组
    NSArray * viewArr = [[NSBundle mainBundle] loadNibNamed:@"CYXView" owner:nil options:nil];
    //2.取出数组中需要的控件
    CYXView * myView = (CYXView *)[viewArr lastObject];
    //3.设置控件的Frame
    myView.frame = CGRectMake(100, 100, 10, 200);
    //4.控件添加到self.View中
    [self.view addSubview:myView];

}

自定义控件之纯代码方式

//重写-(instancetype)initWithFrame:(CGRect)frame方法
//init方法内部会自动调用-(instancetype)initWithFrame:(CGRect)frame  方法,因此建议写这个方法,用于替代-(instancetype)init 方法

-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super init]) {

        //添加图片
        UIImageView * iconView = [[UIImageView alloc]init];
        iconView.backgroundColor = [UIColor grayColor];
        [self addSubview:iconView];

        //添加文字
        UILabel * name = [[UILabel alloc]init];
        name.backgroundColor = [UIColor greenColor];
        name.font = [UIFont systemFontOfSize:15];
        name.textAlignment = NSTextAlignmentCenter;

        [self addSubview:name];

    }

    return self;
}
/**
 * 这个方法专门用来布局子控件,一般在这里设置子控件的frame
 * 当控件本身的尺寸发生改变的时候,系统会自动调用这个方
 */
-(void)layoutSubviews{
    // 一定要调用super方法
    [super layoutSubviews];

    CGFloat shopW = self.frame.size.width;
    CGFloat shopH = self.frame.size.height;

    self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
    self.name.frame  = CGRectMake(0, shopW, shopW, shopH-shopW);
}
-(void)setShop:(CYXShop *)shop{
    //赋值
    _shop = shop;
    self.name.text = self.shop.name;
    self.iconView.image = [UIImage imageNamed:self.shop.icon];
}

给封装View设置数据的几种方式

上一篇下一篇

猜你喜欢

热点阅读