UIKit-UITableView-Version0.4

accessoryView 自定义的右侧样式


cell.accessoryType = UITableViewCellAccessoryNone;//cell没有任何的样式
UITableViewCellAccessoryDisclosureIndicator;//向右的小箭头
UITableViewCellAccessoryDetailButton //里面带i的园形信息按钮
UITableViewCellAccessoryDetailDisclosureButton;//上面两个的合体
UITableViewCellAccessoryCheckmark;//打钩对号;

http://www.jianshu.com/p/378ca60232ef

复用

注册Cell
- (void)registerNib:(UINib*)nib forCellReuseIdentifier:(NSString *)identifier xib
-(void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier 代码

[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"haha"];
有注册

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"haha"];
return cell;
}

无注册

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifer = @"aaa";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifer];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer];
}
return cell;
}

//找出被选中行的indexPath
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

//根据indexPath获取cell
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

//刷新局部section 比如第一组
NSIndexSet * nd=[[NSIndexSet alloc]initWithIndex:1];
[tableView reloadSections:nd withRowAnimation:UITableViewRowAnimationAutomatic];

//刷新局部cell 比如第0组第二行
NSIndexPath *te=[NSIndexPath indexPathForRow:2 inSection:0];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:te,nil] withRowAnimation:UITableViewRowAnimationMiddle];

//去除选中后的状态(非选中时)
didSelectRowAtIndexPath中调用
[tableView deselectRowAtIndexPath:indexPath animated:YES];

自定义cell


1.在initWithStyle创建控件


-(instancetype)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self){
self.nicknameLabel = [[UITextField alloc]init];
[self.contentView addSubview:self.nicknameLabel];
self.nicknameLabel.delegate = self;
}
return self;}

2.在layoutSubviews里布局控件

layoutSubviews在以下情况下会被调用:
addSubview会触发layoutSubviews
设置viewFrame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
滚动一个UIScrollView会触发layoutSubviews
旋转Screen会触发父UIView上的layoutSubviews事件
改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

-(void)layoutSubviews{
CGFloat height = self.frame.size.height;
CGFloat width = self.frame.size.width;
self.nicknameLabel.frame = CGRectMake(10, MARGIN, width-40, height-MARGIN*2);}

3.在setFrame里修改cell的宽度高度


-(void)setFrame:(CGRect)frame{
frame.origin.x += CellSpace;
frame.size.width -= 2 * CellSpace;
frame.origin.y += 10;
frame.size.height -= 2 * 10;
[super setFrame:frame];}

一些API和属性介绍


设置cell的滑动样式 是否可滑动
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
设置tableview是否可以滑动
self.tableView.scrollEnabled =NO;

设置cell右侧样式 设置一些可能需要的空间为懒加载
给cell 赋值时调用 设置右侧样式的方法 根据要赋值的内容 设置右侧样式

你可能感兴趣的:(UIKit-UITableView-Version0.4)