通过xib和代码自定义cell
2015-03-06 03:32
302 查看
一、通过xib自定义cell
1、自定义根源 :默认的UITableCell的内容是固定的。当自带的cell不满足需求时,并且cell的内容是固定的,就可以通过xib来自定义cell。如果不固定就需要手动代码来自定义cell。
2、当你新建一个项目时,你的控制器继承自NSObject协议。但可以自定义一个控制器,继承字UITableVIewController。这样的话你的类的内部就实现了代理数据源协议,并且自带一些必须的方法。
3、如何自定义xib及加载,新建一个empty定义为名.xib文件,拖一个UItableVIewCell控件,在上面拖三个UILable一个UIImageVIew。如果想让UILable自动换行让lines等于1。加载控件有两种方式1UItableVIewCell *cell = [[NSBundle mainBundle] loadNibNamed: owner: option:][0]加载之后是一个数组,调用第一个返回的就是你创建的xib的主控件。2.UINib
*nib = [UINib nibWithNIbName:@“hello" bundle:[UIbundle mainBundle]];调用nib的方法返回,nib类中一共就三个方法。如果需要重用,需要在xib文件中给indentifier赋值,在尖尖的尖头那栏,这样就实现了。
4、设置cell的高度有两种方式,一种是代理方法,一种是tableview自带属性rowheight。
5、通过模型将plist文件里的字典转换成模型,字典转换后的都是对象,当赋值给基本数据类型时,进行intValue的转换等。通过加载已经拥有了cell,但需要给cell里面的每一个控件赋值,如何做,1绑定tag不可取。2、把xib封装成模型,但要注意,模型要继承对应xib的空间类型,比如继承UITableViewCell类。但如何让xib和类文件有关联呢。但需要设置xib文件的class类型为控件类。class为什么类型创建出来的对象就是什么类型的,然后通过连线讲内部子控件连起来,创建cell的时候,可以把上面的两种加载文件的方法封装到类内部,class只能设置当前类型及其子类。控件模型的属性控件用weak。
6、最后把数据模型也封装到xib模型内部,在set方法里给控件的属性负赋值。
7、下面的代码没有xib文件,xib文件需要做的。1创建empty文件。2拖控件。3设置identifer。 4设置class。 5与xib模型属性联系。
xib模型
#import <UIKit/UIKit.h>xib
#import "Data.h"
@interface Cell :
UITableViewCell
@property (nonatomic,weak)
IBOutletUILabel *desc;控件类型的成员变量
@property (nonatomic,weak)
IBOutletUILabel *name;
@property (nonatomic,weak)
IBOutletUIImageView *icon;
@property (nonatomic,strong)
Data *data;数据模型,用来给上面的空间的属性赋值
+(id)newCell;类方法创建cell
+(NSString *)reuseId;把reuse主键封装到模型内部
@end
#import "Cell.h"
@implementation Cell
+(id)newCell{创建方法就是通过bundle加载文件
return [[NSBundlemainBundle]
loadNibNamed:@"cell"owner:niloptions:nil][0];
}
+(NSString *)reuseId{
return @"cell";
}
-(void)setData:(Data *)data{通过set方法给控件内的属性赋值,注意很好的思想
_data = data;
_desc.text = data.desc;
_name.text = data.name;
_icon.image = [UIImageimageNamed:data.icon];
}
@end
数据模型
#import <Foundation/Foundation.h>数据模型很简单就是普通的文件,但要和xib模型文件关联,这里的数据最终要射入到xib模型内部
@interface Data : NSObject
@property (nonatomic,copy)
NSString *desc;
@property (nonatomic,copy)
NSString *icon;
@property (nonatomic,copy)
NSString *name;
-(id) initWithDesc:(NSString *)desc withIcon:(NSString *)icon withName:(NSString *)name;
- (id)initWithDictionary:(NSDictionary *)dictionary;讲plist文件内的dictionary封装成模型
@end
#import "Data.h"
@implementation Data
- (id)initWithDesc:(NSString *)desc withIcon:(NSString *)icon withName:(NSString *)name{
if (self = [superinit]) {
_desc = desc;
_icon = icon;
_name = name;
}
return
self;
}
- (id)initWithDictionary:(NSDictionary *)dictionary{
if (self = [superinit]) {
_name = dictionary[@"name"];
_desc = dictionary[@"desc"];
_icon = dictionary[@"icon”];返回的都是对象,如果是基本数据类型则需要转换
}
return
self;
}
@end
控制器代码
#import "ViewController.h"
#import "Data.h"
#import "Cell.h"
@interface
ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
NSMutableArray *_modelArray;全局数据模型
}
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];通过bundle获取文件路径
NSString *path = [[NSBundlemainBundle]
pathForResource:@"shops.plist"ofType:nil];
NSArray *array = [NSArray
arrayWithContentsOfFile:path];返回数组,通过数组的方法加载文件路径
_modelArray = [NSMutableArrayarray];这里要注意,一定要初始化,要不怎么性,编译器不会抱错
[array
enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop) {
Data *data = [[Data
alloc] initWithDictionary:obj];
[_modelArrayaddObject:data];
}];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return _modelArray.count;返回一共有多少行,每一次的reload都是调用的方法
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
tableView.rowHeight =104;设置tableview的高度
Cell *cell = [tableViewdequeueReusableCellWithIdentifier:[CellreuseId]];先从缓冲池中取,取不到在创建
if (cell == nil) {
cell =[CellnewCell];把创建方法封装到模型内部
}
cell.data =_modelArray[indexPath.row];给xib模型的数据属性赋值,通过数据属性的set方法给模型的属性赋值
return cell;
}
@end
1、自定义根源 :默认的UITableCell的内容是固定的。当自带的cell不满足需求时,并且cell的内容是固定的,就可以通过xib来自定义cell。如果不固定就需要手动代码来自定义cell。
2、当你新建一个项目时,你的控制器继承自NSObject协议。但可以自定义一个控制器,继承字UITableVIewController。这样的话你的类的内部就实现了代理数据源协议,并且自带一些必须的方法。
3、如何自定义xib及加载,新建一个empty定义为名.xib文件,拖一个UItableVIewCell控件,在上面拖三个UILable一个UIImageVIew。如果想让UILable自动换行让lines等于1。加载控件有两种方式1UItableVIewCell *cell = [[NSBundle mainBundle] loadNibNamed: owner: option:][0]加载之后是一个数组,调用第一个返回的就是你创建的xib的主控件。2.UINib
*nib = [UINib nibWithNIbName:@“hello" bundle:[UIbundle mainBundle]];调用nib的方法返回,nib类中一共就三个方法。如果需要重用,需要在xib文件中给indentifier赋值,在尖尖的尖头那栏,这样就实现了。
4、设置cell的高度有两种方式,一种是代理方法,一种是tableview自带属性rowheight。
5、通过模型将plist文件里的字典转换成模型,字典转换后的都是对象,当赋值给基本数据类型时,进行intValue的转换等。通过加载已经拥有了cell,但需要给cell里面的每一个控件赋值,如何做,1绑定tag不可取。2、把xib封装成模型,但要注意,模型要继承对应xib的空间类型,比如继承UITableViewCell类。但如何让xib和类文件有关联呢。但需要设置xib文件的class类型为控件类。class为什么类型创建出来的对象就是什么类型的,然后通过连线讲内部子控件连起来,创建cell的时候,可以把上面的两种加载文件的方法封装到类内部,class只能设置当前类型及其子类。控件模型的属性控件用weak。
6、最后把数据模型也封装到xib模型内部,在set方法里给控件的属性负赋值。
7、下面的代码没有xib文件,xib文件需要做的。1创建empty文件。2拖控件。3设置identifer。 4设置class。 5与xib模型属性联系。
xib模型
#import <UIKit/UIKit.h>xib
#import "Data.h"
@interface Cell :
UITableViewCell
@property (nonatomic,weak)
IBOutletUILabel *desc;控件类型的成员变量
@property (nonatomic,weak)
IBOutletUILabel *name;
@property (nonatomic,weak)
IBOutletUIImageView *icon;
@property (nonatomic,strong)
Data *data;数据模型,用来给上面的空间的属性赋值
+(id)newCell;类方法创建cell
+(NSString *)reuseId;把reuse主键封装到模型内部
@end
#import "Cell.h"
@implementation Cell
+(id)newCell{创建方法就是通过bundle加载文件
return [[NSBundlemainBundle]
loadNibNamed:@"cell"owner:niloptions:nil][0];
}
+(NSString *)reuseId{
return @"cell";
}
-(void)setData:(Data *)data{通过set方法给控件内的属性赋值,注意很好的思想
_data = data;
_desc.text = data.desc;
_name.text = data.name;
_icon.image = [UIImageimageNamed:data.icon];
}
@end
数据模型
#import <Foundation/Foundation.h>数据模型很简单就是普通的文件,但要和xib模型文件关联,这里的数据最终要射入到xib模型内部
@interface Data : NSObject
@property (nonatomic,copy)
NSString *desc;
@property (nonatomic,copy)
NSString *icon;
@property (nonatomic,copy)
NSString *name;
-(id) initWithDesc:(NSString *)desc withIcon:(NSString *)icon withName:(NSString *)name;
- (id)initWithDictionary:(NSDictionary *)dictionary;讲plist文件内的dictionary封装成模型
@end
#import "Data.h"
@implementation Data
- (id)initWithDesc:(NSString *)desc withIcon:(NSString *)icon withName:(NSString *)name{
if (self = [superinit]) {
_desc = desc;
_icon = icon;
_name = name;
}
return
self;
}
- (id)initWithDictionary:(NSDictionary *)dictionary{
if (self = [superinit]) {
_name = dictionary[@"name"];
_desc = dictionary[@"desc"];
_icon = dictionary[@"icon”];返回的都是对象,如果是基本数据类型则需要转换
}
return
self;
}
@end
控制器代码
#import "ViewController.h"
#import "Data.h"
#import "Cell.h"
@interface
ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
NSMutableArray *_modelArray;全局数据模型
}
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];通过bundle获取文件路径
NSString *path = [[NSBundlemainBundle]
pathForResource:@"shops.plist"ofType:nil];
NSArray *array = [NSArray
arrayWithContentsOfFile:path];返回数组,通过数组的方法加载文件路径
_modelArray = [NSMutableArrayarray];这里要注意,一定要初始化,要不怎么性,编译器不会抱错
[array
enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop) {
Data *data = [[Data
alloc] initWithDictionary:obj];
[_modelArrayaddObject:data];
}];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return _modelArray.count;返回一共有多少行,每一次的reload都是调用的方法
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
tableView.rowHeight =104;设置tableview的高度
Cell *cell = [tableViewdequeueReusableCellWithIdentifier:[CellreuseId]];先从缓冲池中取,取不到在创建
if (cell == nil) {
cell =[CellnewCell];把创建方法封装到模型内部
}
cell.data =_modelArray[indexPath.row];给xib模型的数据属性赋值,通过数据属性的set方法给模型的属性赋值
return cell;
}
@end
相关文章推荐
- [ios]如何通过XIB 创建自定义的UIViewTableCell
- 自定义UITableViewCell (通过XIB:每个CELL形状一样适合用XIB来创建CELL)
- 通过代码自定义cell,cell的高度不一致
- iOS通过代码自定义cell(cell的高度不同)的步骤
- 通过代码自定义cell (cell的高度不一致)的步骤:
- iOS_15_通过代码自定义cell_微博UI
- 通过代码自定义cell(cell的高度不一致)实现新浪微博界面
- 如何通过代码自定义高度不一致的cell
- 通过代码自定义cell(cell的高度不一致)
- 通过代码自定义cell(cell的高度不一致)
- 通过代码自定义cell(cell的高度不一致的情况)
- 如何通过XIB 创建自定义的UIViewTableCell
- 通过代码自定义cell(cell高度不同…
- 通过代码自定义cell(cell的高度不一致)
- 通过代码自定义cell——实现qq聊天界面(Version 2 实现聊天内容的背景)
- 通过代码自定义cell
- iso 通过代码自定义cell (cell的高度不一致)
- 自定义xib tableviewcell 无法通过nsdata dataWithContentsOfFile读取的问题
- 通过代码自定义cell 新浪微博页面显示
- 自定义xib TableViewCell 标准写法 代码段