例:自定义单元格中有一个button和一个TextView
1.在XCode中选择新建->Cocoa Touch->Objective-C Class->名字:MyCell 继承:UITableViewCell
2.
MyCell.h文件:
1
2
3
4
5
6
7
|
@interface
MyCell : UITableViewCell
{
UITextView *myTextView;
}
- (
IBAction
)btnAction:(
id
)sender;
@property
(retain,
nonatomic
) IBOutletUITextView *myTextView;
@end
|
MyCell.m文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#import "MyCell.h"
@implementation
MyCell
@synthesize
myTextView;
- (
id
)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(
NSString
*)reuseIdentifier
{
self
= [
super
initWithStyle:style reuseIdentifier:reuseIdentifier];
if
(
self
)
{
}
return
self
;
}
- (
void
)setSelected:(
BOOL
)selected animated:(
BOOL
)animated
{ [
super
setSelected:selected animated:animated];}
- (
IBAction
)btnAction:(
id
)sender {}
|
3.在XCode中选择新建->User Interface->Empty XIB->名字:MyCell
4.打开空的MyCell.xib文件,将UITableViewCell拖到MyCell.xib窗口中,并在属性检查器上
(1)修改Custom Class为MyCell
(2)设定其重用标识符(Identifier),此处设置为:CellReuseID,设定重用标识符可以减少内存的分配,合理利用内存。
5.将MyCell.xib中的控件连接到MyCell.h中
8.最后在UITabelView的委托方法中加载此定制的Cell,代码如下:
1
2
3
4
5
|
- (UITableViewCell *)tableView:(UITableView *)tableView
//nib设置了重用标识符,则tableview会使用重用机制
cellForRowAtIndexPath:(
NSIndexPath
*)indexPath
{
static
NSString
*cellid=@
"CellReuseID"
;
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:cellid];(寻找标识符为cellid并且没被用到的cell用于重用)
|
1
|
if
(cell==
nil
) <br> { <br> cell = [[[
NSBundle
mainBundle] loadNibNamed:@
"MyCell"
owner:
self
options:
nil
] lastObjects]; <br>
//如果此nib没有设置标识符,则当其移出屏幕时会自动释放(dealloc),可以用cell = [MyCell alloc] init];使其不自动释放<br> }<br> NSUInteger row = [indexPath row]; <br> [cell.myTextView setText:@"123456"]; <br> cell.myTextView.editable = NO; <br> return cell;<br> }
|
http://blog.sina.com.cn/s/blog_702e40a80101iue2.html
1.使用系统自定义的各种UITableViewCell的样式
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
}
使用UITableViewCellStyleDefa
使用UITableViewCellStyleValu
使用UITableViewCellStyleValu
在UITableViewCell内默认是有contentview和accessoryView这两个subview的,contentview中的subview根据不同的cell的style会使用不同的布局。contentview和其中的默认subview会根据cell的编辑状态出现的控件自动缩进,自定义cell时可以把自定义控件添加在contentview中,也可以直接添加到cell中。
2.设置UITableViewCell的属性
3.自定义的UITableViewCell重写父类的方法
//初始化uitableviewcell后,自定义cell添加subview
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
//当cell被选中时,uitableview内部会自动调用该方法,重写该方法可以在cell被选中时做一些额外的操作
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
//当cell处于高亮状态时,uitableview内部会自动调用该方法,重写该方法可以在cell处于高亮时做一些额外操作
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
//重写layoutsubviews方法,为了查看当cell改变编辑状态时,有什么subview
-(void)layoutSubviews{
}
当进入删除编辑模式时,cell的subview有一个叫UITableViewCellDeleteCon
当进入移动编辑模式时,cell的subview有一个叫UITableViewCellReorderCo
当进入插入编辑模式时,cell的subview有一个叫UITableViewCellEditContr
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)willTransitionToState:(UITableViewCellStateMask
}
//当cell的状态变为编辑时,uitableview内部会自动调用该方法,重写该方法可以改变cell的布局
-(void)didTransitionToState:(UITableViewCellStateMask
}
4.UITableViewCell自定义背景颜色
方法1:
通过修改contentview的backgroundcolor
方法2:
创建一个uiview,设置它的backgroundcolor后再添加到cell里
方法3:
通过在- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath的回调中设置cell的backgroundcolor