iOS:UITableViewCell自定义单元格
2015-09-08 18:53
363 查看
UITableViewCell:自定义的单元格,可以在xib中创建单元格,也可以在storyBorad中创建单元格。有四种创建方式
<1>在storyBorad中创建的单元格,它是静态的单元格,单元格一开始就存在,可以直接根据自定义的重用标识名加载使用;
<2>当然,storyBorad中单元格也可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,直接根据自定义的重用标识名加载使用也是可以的。
<3>在xib中创建的单元格,如果直接通过bundel的loadNibNme的方法加载,也可以直接根据重用标识符加载使用;
<4>当然,xib文件中的单元格可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,如果直接根据自定义的重用标识符加载使用是行不通的,因为此时代理的方法没有对单元格对象进行初始化,此时,需要对创建单元格对象的过程封装到自己关联的类中进行,即一个创建的单元格的类方法用来加载xib文件,一个类对象的实例方法,用来设置单元格中属性。
这是一个类似于联系人表格的实例,有姓名和图像,以下四种方式都可以实现:
方法一:直接在storyBoard中创建单元格并直接加载,自定义的单元格位置一个UITableView的上面
需要设置单元格的重用标识符identifier:
代码如下:
为初始化数据创建的一个类:
在视图控制器中完成代码:(需要用tag获取单元格的属性控件)
方法二:直接在storyBoard中创建单元格并关联自定义的类并直接加载,自定义的单元格位置一个UITableView的上面
需要设置单元格的重用标识符identifier
将单元格与对应的自定义类关联
代码如下:
为初始化创建的一个类:
与单元格关联的自定义的类,关联单元格的属性控件(不需要再用tag获取了,直接用self.获取)
还是在视图控制器中完成加载:
方法三:在xib文件中创建单元格,然后再视图控制器中直接加载使用
首先在storyBoard中添加一个UITableView
然后在已经创建好的MyCell.xib中创建自定义的单元格为:
设置该单元格的重用标识符identifier:
创建一个联系人初始化的类:
还是在视图控制器中完成加载:
方法四:在xib文件中创建单元格,并创建与之关联的的类,然后将加载过程封装到它的类中帮助初始化完成,同时该类提供类方法,最后再视图控制器中通过这个类方法获取单元格。
首先在storyBoard中添加一个UITableView
然后在已经创建好的MyCell.xib中创建自定义的单元格为:
给单元格设置重用标识符identifier
将单元格与自定义的类关联
创建一个联系人初始化的类:
创建一个与单元格关联的类:(将加载单元格的过程和属性封装起来)
在视图控制器中通过上面的类方法获取单元格
<1>在storyBorad中创建的单元格,它是静态的单元格,单元格一开始就存在,可以直接根据自定义的重用标识名加载使用;
<2>当然,storyBorad中单元格也可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,直接根据自定义的重用标识名加载使用也是可以的。
<3>在xib中创建的单元格,如果直接通过bundel的loadNibNme的方法加载,也可以直接根据重用标识符加载使用;
<4>当然,xib文件中的单元格可以关联一个自定义的类,这个类必须是继承UITableViewCell,这种情况下,如果直接根据自定义的重用标识符加载使用是行不通的,因为此时代理的方法没有对单元格对象进行初始化,此时,需要对创建单元格对象的过程封装到自己关联的类中进行,即一个创建的单元格的类方法用来加载xib文件,一个类对象的实例方法,用来设置单元格中属性。
这是一个类似于联系人表格的实例,有姓名和图像,以下四种方式都可以实现:
方法一:直接在storyBoard中创建单元格并直接加载,自定义的单元格位置一个UITableView的上面
需要设置单元格的重用标识符identifier:
代码如下:
为初始化数据创建的一个类:
#import <Foundation/Foundation.h> @interface Contact : NSObject @property (copy,nonatomic)NSString *name; @property (copy,nonatomic)NSString *faceName; -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName; @end
#import "Contact.h" @implementation Contact -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName { self = [super init]; if(self) { _name = [name copy]; _faceName = [faceName copy]; } return self; } @end
在视图控制器中完成代码:(需要用tag获取单元格的属性控件)
#import "ViewController.h" #import "Contact.h" @interface ViewController ()<UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic)NSMutableArray *contacts; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化数据 self.contacts = [NSMutableArray arrayWithCapacity:9]; for(int i=0; i<9; i++) { Contact *conatct = [[Contact alloc]initWithName:[NSString stringWithFormat:@"name%d",i+1] andFaceName:[NSString stringWithFormat:@"%d.png",i]]; [self.contacts addObject:conatct]; } //设置tableView的数据源 self.tableView.dataSource = self; } #pragma mark -tableView的数据源方法 //每一组多少行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } //设置每一个单元格的内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象 static NSString *reuseIdentifier = @"myCell"; UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; //2.设置单元格对象的内容 Contact *contact = [self.contacts objectAtIndex:indexPath.row]; UILabel *label = (UILabel*)[cell viewWithTag:1]; label.text = contact.name; UIImageView *imageView = (UIImageView*)[cell viewWithTag:2]; [imageView setImage:[UIImage imageNamed:contact.faceName]]; return cell; } @end
方法二:直接在storyBoard中创建单元格并关联自定义的类并直接加载,自定义的单元格位置一个UITableView的上面
需要设置单元格的重用标识符identifier
将单元格与对应的自定义类关联
代码如下:
为初始化创建的一个类:
#import <Foundation/Foundation.h> @interface Contact : NSObject @property (copy,nonatomic)NSString *name; @property (copy,nonatomic)NSString *faceName; -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName; @end #import "Contact.h" @implementation Contact -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName { self = [super init]; if(self) { _name = [name copy]; _faceName = [faceName copy]; } return self; } @end
与单元格关联的自定义的类,关联单元格的属性控件(不需要再用tag获取了,直接用self.获取)
还是在视图控制器中完成加载:
#import "ViewController.h" #import "Contact.h" #import "myTableViewCell.h" @interface ViewController ()<UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic)NSMutableArray *contacts; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化数据 self.contacts = [NSMutableArray arrayWithCapacity:9]; for(int i=0; i<9; i++) { Contact *conatct = [[Contact alloc]initWithName:[NSString stringWithFormat:@"name%d",i+1] andFaceName:[NSString stringWithFormat:@"%d.png",i]]; [self.contacts addObject:conatct]; } //设置tableView的数据源 self.tableView.dataSource = self; } #pragma mark -tableView的数据源方法 //每一组多少行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } //设置每一个单元格的内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象 static NSString *reuseIdentifier = @"myCell"; myTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; //2.设置单元格对象的内容 Contact *contact = [self.contacts objectAtIndex:indexPath.row]; cell.label.text = contact.name; [cell.imgView setImage:[UIImage imageNamed:contact.faceName]]; return cell; } @end
方法三:在xib文件中创建单元格,然后再视图控制器中直接加载使用
首先在storyBoard中添加一个UITableView
然后在已经创建好的MyCell.xib中创建自定义的单元格为:
设置该单元格的重用标识符identifier:
创建一个联系人初始化的类:
#import <Foundation/Foundation.h> @interface Contact : NSObject @property (copy,nonatomic)NSString *name; @property (copy,nonatomic)NSString *faceName; -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName; @end
#import "Contact.h"
@implementation Contact
-(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName
{
self = [super init];
if(self)
{
_name = [name copy];
_faceName = [faceName copy];
}
return self;
}
@end
还是在视图控制器中完成加载:
#import "ViewController.h" #import "Contact.h" #import "myTableViewCell.h" @interface ViewController ()<UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic)NSMutableArray *contacts; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化数据 self.contacts = [NSMutableArray arrayWithCapacity:9]; for(int i=0; i<9; i++) { Contact *conatct = [[Contact alloc]initWithName:[NSString stringWithFormat:@"name%d",i+1] andFaceName:[NSString stringWithFormat:@"%d.png",i]]; [self.contacts addObject:conatct]; } //设置tableView的数据源 self.tableView.dataSource = self; } #pragma mark -tableView的数据源方法 //每一组多少行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } //直接从xib文件中加载 //设置每一个单元格的内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象 static NSString *reuseIdentifier = @"myCell"; UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; //2.如果没找到,就自己创建cell if(!cell) { //从xib文件中加载视图 NSArray *views = [[NSBundle mainBundle]loadNibNamed:@"MyCell" owner:nil options:nil]; cell = (UITableViewCell*)[views lastObject]; } //3.设置单元格对象的内容 Contact *contact = [self.contacts objectAtIndex:indexPath.row]; UILabel *label = (UILabel*)[cell viewWithTag:1]; label.text = contact.name; UIImageView *imgView = (UIImageView*)[cell viewWithTag:2]; [imgView setImage:[UIImage imageNamed:contact.faceName]]; return cell; }
方法四:在xib文件中创建单元格,并创建与之关联的的类,然后将加载过程封装到它的类中帮助初始化完成,同时该类提供类方法,最后再视图控制器中通过这个类方法获取单元格。
首先在storyBoard中添加一个UITableView
然后在已经创建好的MyCell.xib中创建自定义的单元格为:
给单元格设置重用标识符identifier
将单元格与自定义的类关联
创建一个联系人初始化的类:
1#import <Foundation/Foundation.h> 2 3 @interface Contact : NSObject 4 @property (copy,nonatomic)NSString *name; 5 @property (copy,nonatomic)NSString *faceName; 6 -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName; 7 @end 8 9 10 #import "Contact.h" 11 12 @implementation Contact 13 -(instancetype)initWithName:(NSString*)name andFaceName:(NSString*) faceName 14 { 15 self = [super init]; 16 if(self) 17 { 18 _name = [name copy]; 19 _faceName = [faceName copy]; 20 } 21 return self; 22 } 23 @end
创建一个与单元格关联的类:(将加载单元格的过程和属性封装起来)
在视图控制器中通过上面的类方法获取单元格
#import "ViewController.h" #import "Contact.h" #import "myTableViewCell.h" @interface ViewController ()<UITableViewDataSource> @property (weak, nonatomic) IBOutlet UITableView *tableView; @property (strong,nonatomic)NSMutableArray *contacts; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化数据 self.contacts = [NSMutableArray arrayWithCapacity:9]; for(int i=0; i<9; i++) { Contact *conatct = [[Contact alloc]initWithName:[NSString stringWithFormat:@"name%d",i+1] andFaceName:[NSString stringWithFormat:@"%d.png",i]]; [self.contacts addObject:conatct]; } //设置tableView的数据源 self.tableView.dataSource = self; } #pragma mark -tableView的数据源方法 //每一组多少行 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.contacts.count; } //在与xib关联的类中加载xib文件(其实就是封装了一下而已) //设置每一个单元格的内容 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //1.根据reuseIdentifier,先到对象池中去找重用的单元格对象 static NSString *reuseIdentifier = @"myCell"; myTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; //2.如果没找到,就自己创建cell if(!cell) { cell = [myTableViewCell cell];//调用类方法 } //3.设置单元格对象的内容 Contact *contact = [self.contacts objectAtIndex:indexPath.row]; [cell setContact:contact];//调用实例方法 return cell; } @end
相关文章推荐
- AbstractQueuedSynchronizer的实现分析(下)
- 解决ios9 中UITableView 的Cell 自动缩进问题
- AbstractQueuedSynchronizer的实现分析(上)
- iOS获取UUID,并使用keychain存储
- hdu 1005 Number Sequence
- Android Bluetooth Stack: Bluedroid(五岁以下儿童):The analysis of A2DP Source
- 实时获取UITextFiled和UIDataPicker等的显示数值
- Netlink Protocol Library Suite (libnl)
- uitableview 刷新一行
- IOS 自动布局指南1 介绍(auto layout guide)
- UVA 11235 Frequent values (RMQ )
- Core Data Programming Guid
- iOS UITabBarController按钮凸起效果实现
- 开源项目分析之UIL
- easyui 模糊匹配解决办法 Firefox不会自动匹配
- guibin
- values语言支持文件命名格式
- Algorithms—95.Unique Binary Search Trees II
- virtualbox增强功能-VBoxGuestAdditions安装
- quick 3.3加载Spine问题,quick3.3加载spine