自定义View控件(1—xib实例代码)

/**
* 1. 设置显示到控制器上的模型数据(根据plist文件设置其属性,然后定义与实现工厂方法来快速实现字典转模型)
*/

  // 1. 模型Shop.h文件

@interface Shop : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *icon;

- (Shop *)initWithDict:(NSDictionary *)dict;
+ (Shop *)shopWithDict:(NSDictionary *)dict;

@end

// 3. shop.m文件

#import "Shop.h"

@implementation Shop

- (Shop *)initWithDict:(NSDictionary *)dict
{
if (self = [super init]) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+ (Shop *)shopWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
@end

/**
* 2. 新建一个类来管理xib文件其实就是来管理xib上的子控件,然后定义和实现一个通过xib加载来快速创建自定义控件的工厂方法。重写模型数据的set方法来初始化自定义控件上的控件数据展示
*/
注意:此时你要将你定义类JPShopView来管理JPShopView.xib文件的,将该类设置成xib的 “custom class” 属性

1> 你需要拥有一个模型数据 model,因为你要达到将数据展示到自定义控件上去

2> 重写model模型属性的set方法从而达到设置自定义控件上的数据展示效果

[解析:为了将数据更好地展示到自定义控件上去,你可能想将设置数据操作,直接设置到自定义控件内部解决,不向外界过多的暴露,这时,你想到你已经拥有一个模型数据,要将数据展示到自定义控件上就轻而易举了,只要重写属性的set方法即可(因为你此时要明白,我肯定会拿到数据后才会展示到自定义控件上去,所以前提是,你将数据传给我,然后赋值给我自定义控件拥有了属性model,这时就会调用属性的set方法,所以我们只要重写属性的set方法,就可以在其中获取模型数据然后直接初始化自定义控件上的控件上所有数据展示。欧了)]

// 1. JPShopView.h

@class Shop;

@interface JPShopView : UIView

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

@property (nonatomic, strong) Shop *shop;

+ (instancetype)shopView;

@end

// 2. JPShopView.m

#import "JPShopView.h"
#import "Shop.h"

@implementation JPShopView

+ (instancetype)shopView{
return [[[NSBundle mainBundle] loadNibNamed:@"JPShopView" owner:nil options:nil] lastObject];
}

- (void)setShop:(Shop *)shop{

_shop = shop;

self.iconView.image = [UIImage imageNamed:self.shop.icon];
self.nameView.text = self.shop.name;
}
@end

/**
* 3. 在控制器中,获取将要展示到View上的数据,然后将其展示到自定义控件与其他控件上去即可
让控制器拥有一个模型集合,重写模型集合属性的get方法,然后直接创建自定义控件,取到指定模型设置给自定义控件,
让后将自定义控件添加到控制器的view上即可。
*/
1> 获取将要展示到View上的数据: 你可能是通过解析plist文件的数组字典来获取数据的,那么你就需要设置一个模型数组属性来存储plist文件中的数据
你需要实现该属性的get方法实现懒加载效果,从而避免资源的过度浪费。
2> 然后你就可以定义一个自定义的控件,然后将模型展示到即可:
* 初始化一个自定义的控件。
* 获取一个模型数据,然后赋值给自定义控件的模型属性。
* 将自定义的控件添加到控制器的view上即可。

// 1.定义自定义控件
JPShopView *shopView = [JPShopView shopView];
// 2.设置自定义控件的模型数据
shopView.shop = self.shops[index];
// 3. 计算自定义控件添加到控制器的View上的frame
shopView.frame = CGRectMake(subViewX, subViewY, subViewWidth, 70);

// 5. 将搭建好的自定义控件添加到控制器的View上

[self.view addSubview:shopView];

 

posted @ 2015-07-14 00:38  J了个P  阅读(261)  评论(0编辑  收藏  举报