UIKit-UITableView-Version0.4

作者: 石丘 | 来源:发表于2015-07-21 20:16 被阅读168次
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
设置viewFrame会触发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 赋值时调用 设置右侧样式的方法 根据要赋值的内容 设置右侧样式

相关文章

网友评论

  • 石丘:@咸鱼_ 以前做的没用markdown 特别丑 重新搞了下 也算复习下

本文标题:UIKit-UITableView-Version0.4

本文链接:https://www.haomeiwen.com/subject/utlpqttx.html