代码改变世界

使用xib封装一个自定义view的步骤

2016-12-21 17:09  supper_Ho  阅读(132)  评论(0编辑  收藏  举报

使用xib封装一个自定义view的步骤

1> 新建一个继承UIView的自定义view,假设类名叫做(MJAppView)

2> 新建一个MJAppView.xib文件来描述MJAppView内部的结构

3> 修改UIView的类型为MJAppView真是类型

4> 将内部的子控件跟MJAppView进行属性连线

5> MJAppView提供一个模型属性

6> 重写模型属性的set方法,因为在set方法中可以拿到外界传递的模型数据

7> 把模型数据拆开,分别设置数据到对应的子控件中

8> 补充:提供一个创建MJAppView的类方法,将读取xib文件的代码屏蔽起来

 

 

//

//  MJAppView.h

//  01-应用管理

//

//  Created by apple on 14-3-26.

//  Copyright (c) 2014年 itcast. All rights reserved.

//

 

#import <UIKit/UIKit.h>

 

@class MJApp;

 

@interface MJAppView : UIView

 

/**

 *  模型数据

 */

@property (nonatomic, strong) MJApp *app;

 

+ (instancetype)appView;

 

/**

 *  通过模型数据来创建一个view

 */

+ (instancetype)appViewWithApp:(MJApp *)app;

 

@end

 

//

//  MJAppView.m

//  01-应用管理

//

//  Created by apple on 14-3-26.

//  Copyright (c) 2014年 itcast. All rights reserved.

//

 

#import "MJAppView.h"

#import "MJApp.h"

 

@interface MJAppView()

@property (weak, nonatomic) IBOutlet UIImageView *iconView;

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;

@end

 

@implementation MJAppView

 

//+ (instancetype)appView

//{

//    NSBundle *bundle = [NSBundle mainBundle];

//    // 读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回)

//    NSArray *objs = [bundle loadNibNamed:@"MJAppView" owner:nil options:nil];

//    return [objs lastObject];

//}

//

//+ (instancetype)appViewWithApp:(MJApp *)app

//{

//    MJAppView *appView = [self appView];

//    appView.app = app;

//    return appView;

//}

 

+ (instancetype)appViewWithApp:(MJApp *)app

{

    NSBundle *bundle = [NSBundle mainBundle];

    // 读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回)

    NSArray *objs = [bundle loadNibNamed:@"MJAppView" owner:nil options:nil];

    MJAppView *appView = [objs lastObject];

    appView.app = app;

    return appView;

}

 

+ (instancetype)appView

{

    return [self appViewWithApp:nil];

}

 

- (void)setApp:(MJApp *)app

{

    _app = app;

    

    // 1.设置图标

    self.iconView.image = [UIImage imageNamed:app.icon];

    

    // 2.设置名称

    self.nameLabel.text = app.name;

}

 

@end