1.创建model
@interface Model : NSObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, assign) BOOL isOpen;
@property (nonatomic, assign) CGFloat cellHeight;
#import "Model.h"
@implementation Model
- (void)setTitle:(NSString*)title
{
_title= title;
CGFloat w = [UIScreen mainScreen].bounds.size.width - 24;
CGFloath =MAXFLOAT;
NSDictionary *dict = @{NSFontAttributeName: [UIFont systemFontOfSize:16]};
CGFloat height = [title boundingRectWithSize:CGSizeMake(w, h) options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size.height;
_cellHeight= height +24;
}
2自定义cell
#import
#import "Model.h"
NS_ASSUME_NONNULL_BEGIN
@interfaceTableViewCell :UITableViewCell
@property (nonatomic, strong)Model *model;
@property (nonatomic,copy)void(^moreButtonAction)(UIButton*button);
#import "TableViewCell.h"
#import "Masonry/Masonry.h"
@interface TableViewCell()
@property (nonatomic, strong) UILabel *contentL;
@property (nonatomic, strong)UIButton *moreButton;
@end
@implementation TableViewCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
{
if(self= [superinitWithStyle:stylereuseIdentifier:reuseIdentifier]) {
self.clipsToBounds = YES;
self.selectionStyle = UITableViewCellSelectionStyleNone;
[selflayout];
}
return self;
}
- (void)layout
{
[self.contentL mas_remakeConstraints:^(MASConstraintMaker *make) {
make.bottom.mas_equalTo(-12);
make.left.top.mas_equalTo(12);
make.right.mas_equalTo(-12);
}];
// [self.moreButton mas_remakeConstraints:^(MASConstraintMaker *make) {
// make.bottom.mas_equalTo(-12);
// make.right.mas_equalTo(-12);
// }];
}
- (UIButton*)moreButton{
if(_moreButton==nil) {
_moreButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_moreButton setTitle:@"更多" forState:UIControlStateNormal];
[_moreButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[_moreButton addTarget:self action:@selector(moreButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:_moreButton];
}
return _moreButton;
}
- (UILabel*)contentL
{
if(!_contentL) {
_contentL= [[UILabelalloc]init];
_contentL.frame = CGRectMake(0, 0, self.contentView.bounds.size.width, 0);
_contentL.lineBreakMode = NSLineBreakByTruncatingTail;
_contentL.numberOfLines = 4;
[self.contentView addSubview:_contentL];
}
return _contentL;
}
- (void)setModel:(Model*)model{
_model= model;
self.contentL.text= model.title;
if(model.isOpen) {
self.contentL.numberOfLines=NSIntegerMax;
}else{
self.contentL.numberOfLines=4;
}
}
- (void)moreButtonAction:(UIButton*)moreButton{
if (self.moreButtonAction) {
self.moreButtonAction(moreButton);
}
}
3.viewConrtroller的内容
import "ViewController.h"
#import "Model.h"
#import "TableViewCell.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic, strong)UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *testDataArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.tableView];
// Do any additional setup after loading the view, typically from a nib.
}
- (NSMutableArray*)testDataArray
{
if (!_testDataArray) {
NSArray *array = @[@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.",
@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车",
@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直",
@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车",
@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚.腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻",
@"腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。汽车",
];
NSMutableArray *tempArray = [NSMutableArray array];
for(NSString*strinarray) {
Model*model = [Modelnew];
model.title= str;
model.isOpen=NO;
[tempArrayaddObject:model];
}
_testDataArray= tempArray;
}
return _testDataArray;
}
#pragma mark UITableViewDataSource
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return self.testDataArray.count;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([TableViewCell class])];
Model*model =self.testDataArray[indexPath.row];
cell.model= model;
// cell.moreButtonAction = ^(UIButton * _Nonnull button) {
// TableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// [button setTitle:@"更多" forState:UIControlStateNormal];
// cell.model.isOpen = !cell.model.isOpen;
// [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
// };
returncell;
}
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
TableViewCell*cell = [tableViewcellForRowAtIndexPath:indexPath];
cell.model.isOpen = !cell.model.isOpen;
[tableViewreloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
- (CGFloat)tableView:(UITableView*)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath*)indexPath
{
Model*model =self.testDataArray[indexPath.row];
returnmodel.cellHeight;
}
#pragma mark--UITableViewDelegate,UITableViewDataSource
- (UITableView*)tableView{
if(_tableView==nil) {
_tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
_tableView.delegate=self;
_tableView.dataSource=self;
[_tableView registerClass:[TableViewCell class] forCellReuseIdentifier:NSStringFromClass([TableViewCell class])];
}
return _tableView;
}