accessoryView 自定义的右侧样式
<code>
cell.accessoryType = UITableViewCellAccessoryNone;//cell没有任何的样式
UITableViewCellAccessoryDisclosureIndicator;//向右的小箭头
UITableViewCellAccessoryDetailButton //里面带i的园形信息按钮
UITableViewCellAccessoryDetailDisclosureButton;//上面两个的合体
UITableViewCellAccessoryCheckmark;//打钩对号;
</code>
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"];
有注册
<code>
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"haha"];
return cell;
}
</code>
无注册
<code>
-(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;
}
</code>
//找出被选中行的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
创建控件
<code>
-(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;}
</code>
2.在layoutSubviews
里布局控件
layoutSubviews
在以下情况下会被调用:
addSubview
会触发layoutSubviews
设置view
的Frame
会触发layoutSubviews
,当然前提是frame
的值设置前后发生了变化
滚动一个UIScrollView
会触发layoutSubviews
旋转Screen
会触发父UIView
上的layoutSubviews
事件
改变一个UIView
大小的时候也会触发父UIView
上的layoutSubviews
事件
<code>
-(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);}
</code>
3.在setFrame
里修改cell的宽度高度
<code>
-(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];}
</code>
一些API和属性介绍
设置cell的滑动样式 是否可滑动
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
设置tableview是否可以滑动
self.tableView.scrollEnabled =NO;
设置cell右侧样式 设置一些可能需要的空间为懒加载
给cell 赋值时调用 设置右侧样式的方法 根据要赋值的内容 设置右侧样式