前言
这是第一次发表自己的博客,一直不知道该写点什么东西,恰巧今天写了个App中比较常见的使用场景,列表页面列表每行显示的数据有限,不能完整的显示所有内容,通过点击UITableViewCell将不能完全展示的内容展示完全,再次点击会继续隐藏部分内容。Demo见:CellShowAllText,效果如图:
实现思路
1、通过自动布局方式设置UILabel在TableViewCell的位置,必须保证Label的top、left、right、bottom都有约束条件(本例子布局使用Masonry); 2、在给TableViewCell传入的模型添加一个字段open,标记TableViewCell内容是否打开,如果打开将Label的numberOfLines设置为0,关闭值为1;
- (void)setOpen:(BOOL)open
{
if (open == YES) {
self.label.numberOfLines = 0;
} else {
self.label.numberOfLines = 1;
}
[self layoutIfNeeded];
}
- (void)layoutSubviews
{
[super layoutSubviews];
[self.label mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.contentView.mas_top).offset(8);
make.left.mas_equalTo(self.contentView.mas_left).offset(8);
make.right.mas_equalTo(self.contentView.mas_right).offset(-8);
make.bottom.mas_equalTo(self.contentView.mas_bottom).offset(-8);
}];
}
复制代码
3、在TableView的代理方法- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath中,更改open的值,并刷新TableView。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
VCObject *object = (VCObject *)self.dataSource[indexPath.row];
object.open = !object.open;
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
复制代码