iOS - 类似朋友圈的社交界面实现

06-25 15:54:00   来源:   评论: 点击:

公司在做一个报修工单的功能,其中主要功能点在于,这个功能不完全是静态显示的, 它还可以点击回复,在下面



公司在做一个报修工单的功能,其中主要功能点在于,这个功能不完全是静态显示的,

它还可以点击回复,在下面增加评论,可以点击查看评论详情,也可以收回评论详情,

评论可以带图片,也可以不带图片,工单内容可以带图片,也可以不带图片。

并且回复内容的条数也不确定,就是因为这样的不确定性,一定程度增加了开发的难度。

根据MVC的思想,最初Cell应该自带一个数据模型dataModel,单现在我们多增加一个Frame模型,

frame模型里面包含了各个子控件的frame值,并且自带数据模型dataModel属性,

我们就是在设置dataModel的时候 给frame计算每一个cell的高度

首先我们要准备数据模型,有了数据模型,才能计算文字的大小,才能得到Frame模型

以下是数据模型的代码:

[code]#import <Foundation/Foundation.h>@interface RepairOrderModel : NSObject@property (nonatomic,strong) NSString * repair_id;@property (nonatomic,strong) NSString * faddress;@property (nonatomic,strong) NSArray * comment_imag_list;@property (nonatomic,strong) NSString * fservicecontent;@property (nonatomic,strong) NSString * frealname;@property (nonatomic,strong) NSString * fordernum;@property (nonatomic,strong) NSString * power_do;@property (nonatomic,strong) NSString * fusername;@property (nonatomic,strong) NSString * fcreatetime;@property (nonatomic,strong) NSString * fstatus;@property (nonatomic,strong) NSArray * reply_list;@property (nonatomic,strong) NSArray * repairs_imag_list;@property (nonatomic,strong) NSString * comment_score;@property (nonatomic,strong) NSString * normal_do;@property (nonatomic,strong) NSString * comment_content;@property (nonatomic,strong) NSString * fremindercount; // 加急状态-(instancetype)initWithDict:(NSDictionary *)dict;+(instancetype)repairModelWithDict:(NSDictionary *)dict;@end


先来看看Frame模型的代码:

在.h文件里:

[code]#import <Foundation/Foundation.h>#import "RepairViewFrame.h" // 回复评论列表的区域frame@class RepairOrderModel;@interface RepairOrderFrame : NSObject/** 是否展开回复 默认是NO*/@property (nonatomic,assign) BOOL isOpenReply;/** *  头像的frame  ,结构体用assin */@property (nonatomic, assign, readonly) CGRect iconF;/** *  业主名的frame */@property (nonatomic, assign, readonly) CGRect nameF;/** *  订单时间的frame */@property (nonatomic, assign, readonly) CGRect timeF;/** *  订单内容的frame */@property (nonatomic, assign, readonly) CGRect desF;/** *  业主地址的frame */@property (nonatomic, assign, readonly) CGRect addF;/** *  订单号码的frame */@property (nonatomic, assign, readonly) CGRect orderNumF;/** *  加急状态的frame */@property (nonatomic, assign, readonly) CGRect urgentF;/** *  配图1的frame */@property (nonatomic, assign, readonly) CGRect image1ListF;/** *  配图2的frame */@property (nonatomic, assign, readonly) CGRect image2ListF;/** *  配图3的frame */@property (nonatomic, assign, readonly) CGRect image3ListF;/** *  派单按钮的frame */@property (nonatomic, assign, readonly) CGRect sendOrdersBtnF;/** *  派单状态的frame */@property (nonatomic, assign, readonly) CGRect sendStateF;/** *  接受按钮的frame */@property (nonatomic, assign, readonly) CGRect acceptBtnF;/** *  评论按钮的frame */@property (nonatomic, assign, readonly) CGRect commandBtnF;/** *  评论数量的frame */@property (nonatomic, assign, readonly) CGRect countLabelF;/** *  详情按钮的frame */@property (nonatomic, assign, readonly) CGRect detailBtnF;/** *  回复区域的frame */@property (nonatomic, assign, readonly) CGRect commandViewF;/** *  回复区域内部的frame模型数组 装RepairViewFrame 模型 */@property (nonatomic,strong) NSMutableArray * repairViewFrameArr;//@property (nonatomic, assign, readonly) RepairViewFrame * commandFrameModel;/** *  cell的高度 */@property (nonatomic, assign, readonly) CGFloat cellHeight;@property (nonatomic, strong) RepairOrderModel *model;    //只有拿到模型数据才能算这些属性的frame,readonly:在这个模型里面的frame属性别人不能乱改,只能访问@end


因为我这个页面比较复杂 子控件比较多 所以属性也很多

注意:我这里还有一个属性是repairViewFrameArr 这个是装载我回复区域的每一条回复的Frame

我把回复区域的每一条回复单独做了另外一个View,所以每一个回复View就要对应一个回复Frame

我就把所有回复的Frame装在这个数组里。(如果你们的页面没有回复区域,此处省略)

在设置Frame模型的实现文件.m里

切记,在Frame模型中计算大小设置的字号应该和cell中展现一样

[code]// 小号字体#define SmallFont [UIFont systemFontOfSize:12]// 中号字体#define MiddleFont [UIFont systemFontOfSize:14]// 正常字体#define LargeFont [UIFont systemFontOfSize:16]#import "RepairOrderFrame.h"  #import "RepairOrderModel.h"  // 数据模型@implementation RepairOrderFrame-(instancetype)init{    if (self = [super init]) {        self.isOpenReply = NO;        self.repairViewFrameArr = [NSMutableArray array];   //回复数组(里面装载回复的Frame模型)    }    return self;}/** *  计算文字尺寸 * *  @param text    需要计算尺寸的文字 *  @param font    文字的字体 *  @param maxSize 文字的最大尺寸 */- (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize{    NSDictionary *attrs = @{NSFontAttributeName : font};    return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;}- (void)setModel:(RepairOrderModel *)model  //重写set方法,接收模型数据为本类的属性赋值{    _model = model;    // 子控件之间的间距    CGFloat padding = 10;    // 1.头像    CGFloat iconX = padding;    CGFloat iconY = padding;    CGFloat iconW = 40;    CGFloat iconH = 40;    _iconF = CGRectMake(iconX, iconY, iconW, iconH);    // 2.业主名字    CGSize nameSize = [self sizeWithText:self.model.frealname font:LargeFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat nameX = CGRectGetMaxX(_iconF) + padding;    CGFloat nameY = iconY + 10;    _nameF = CGRectMake(nameX, nameY, nameSize.width, nameSize.height);    // 3.日期    CGSize timeSize = [self sizeWithText:self.model.fcreatetime font:SmallFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat timeX = CGRectGetMaxX(_iconF) + padding;    CGFloat timeY = nameY + nameSize.height;    _timeF = CGRectMake(timeX, timeY, timeSize.width, timeSize.height);    // 4.地址    CGSize addSize = [self sizeWithText:self.model.faddress font:LargeFont maxSize:CGSizeMake(120, MAXFLOAT)];    CGFloat addX = ScreenWidth - addSize.width - padding;    CGFloat addY = nameY;    _addF = CGRectMake(addX, addY, addSize.width, nameSize.height);    // 5.单号    CGSize orderNumSize = [self sizeWithText:[NSString stringWithFormat:@"单号:%@",self.model.fordernum] font:SmallFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat orderNumX = ScreenWidth - orderNumSize.width - padding;    CGFloat orderNumY = timeY;    _orderNumF = CGRectMake(orderNumX, orderNumY, orderNumSize.width, orderNumSize.height);    // 6.加急    CGSize urgentSize = [self sizeWithText:@"加急" font:MiddleFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat urgentX = timeX;    CGFloat urgentY = timeY + timeSize.height + 2 * padding;    _urgentF = CGRectMake(urgentX, urgentY, urgentSize.width, urgentSize.height);    // 7.服务内容    CGSize desSize = [self sizeWithText:self.model.fservicecontent font:MiddleFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat desX = urgentX + urgentSize.width + 2;    CGFloat desY = timeY + timeSize.height +  2 * padding;    _desF = CGRectMake(desX, desY, desSize.width, desSize.height);    // 8.图片列表 (最多三张)    if (self.model.repairs_imag_list.count != 0) {// 有配图        CGFloat width = 70;        switch (self.model.repairs_imag_list.count) {            case 3:            {                CGFloat pictureX = nameX + 2 * padding + 2 * width ;                CGFloat pictureY = CGRectGetMaxY(_desF) + 1.5 * padding;                _image3ListF = CGRectMake(pictureX, pictureY, width, width);            }            case 2:            {                CGFloat pictureX = nameX + padding + width;                CGFloat pictureY = CGRectGetMaxY(_desF) + 1.5 * padding;                _image2ListF = CGRectMake(pictureX, pictureY, width, width);            }            case 1:            {                CGFloat pictureX = nameX;                CGFloat pictureY = CGRectGetMaxY(_desF) + 1.5 * padding;                _image1ListF = CGRectMake(pictureX, pictureY, width, width);            }                break;        }    }    else{        _image1ListF = CGRectMake(0, CGRectGetMaxY(_desF) + 1.5 * padding , 0, 0);        _image2ListF = CGRectMake(0, CGRectGetMaxY(_desF) + 1.5 * padding , 0, 0);        _image3ListF = CGRectMake(0, CGRectGetMaxY(_desF) + 1.5 * padding , 0, 0);    }    // 9.派单button    CGFloat sendOrderX = 1.5 * padding;    CGFloat sendOrderY = CGRectGetMaxY(_image1ListF) + padding;    CGFloat sendOrderW = 30;    CGFloat sendOrderH = 30;    _sendOrdersBtnF = CGRectMake(sendOrderX, sendOrderY, sendOrderW, sendOrderH);    // 10.派单状态    CGSize sendStateSize = [self sizeWithText:@"派单" font:MiddleFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];    CGFloat sendStateX = CGRectGetMaxX(_sendOrdersBtnF) + padding;    CGFloat sendStateY = sendOrderY + padding;    _sendStateF = CGRectMake(sendStateX, sendStateY, sendStateSize.width, sendStateSize.height);    // 11.接受button    CGFloat acceptX = CGRectGetMaxX(_sendStateF) +padding;    CGFloat acceptY = sendStateY;    CGFloat acceptW = 40;    CGFloat acceptH = 25;    _acceptBtnF = CGRectMake(acceptX, acceptY, acceptW, acceptH);    // 12.评论button    CGFloat commandX = ScreenWidth - padding - 120;    CGFloat commandY = sendOrderY;    CGFloat commandW = 30;    CGFloat commandH = 30;    _commandBtnF = CGRectMake(commandX, commandY, commandW, commandH);    // 13.评论数量    CGFloat countX = commandX + commandW + 2;    CGFloat countY = commandY + commandH - 15;    CGFloat countW = 20;    CGFloat countH = 15;    _countLabelF = CGRectMake(countX, countY, countW, countH);    // 14.详情button    CGFloat detailBtnX = ScreenWidth - padding -  60;    CGFloat detailBtnY = sendOrderY + 10;    CGFloat detailBtnW = 40;    CGFloat detailBtnH = 25;    _detailBtnF = CGRectMake(detailBtnX, detailBtnY, detailBtnW, detailBtnH);    // 15.回复区域  (此处就是增加了每一条回复的Frame模型)    CGFloat reply_listHeight = 0.0;    if (model.reply_list.count != 0) {        [self.repairViewFrameArr removeAllObjects];        // 头像 同派单一样大小和高度        for (int i = 0; i < model.reply_list.count; i ++) {            RepairViewFrame * repairFrame = [[RepairViewFrame alloc]init];            repairFrame.replyDic = model.reply_list[i];            reply_listHeight += repairFrame.viewHeight;            [self.repairViewFrameArr addObject:repairFrame];        }    }    NSLog(@"回复区域的高度 === %f",reply_listHeight);    CGFloat commandViewX = 0;    CGFloat commandViewY = detailBtnY + detailBtnH + padding * 2;    CGFloat commandViewW = ScreenWidth;    CGFloat commandViewH = reply_listHeight;    _commandViewF = CGRectMake(commandViewX, commandViewY, commandViewW, commandViewH);    _cellHeight = CGRectGetMaxY(_detailBtnF) + 2 * padding;    if (self.isOpenReply) {        _cellHeight += reply_listHeight;    }}


之后我们来看看Cell的头文件.h里:

[code]#import <UIKit/UIKit.h>#import "RepairOrderModel.h"  // 工单数据模型头文件#import "RepairOrderFrame.h"  // 工单Frame模型头文件typedef void (^PushPhotoBigVCBlock)(NSArray * imageList);  //展示大图typedef void (^PushRealBlock)(NSString * frealname);      //跳转业主页typedef void (^LookReplyBlock)(NSIndexPath * myIndexPath,BOOL isOpen);      //点击查看回复详情typedef void (^PushCommandVCBlock)();      //跳转评论页@interface RepairOrderTableViewCell : UITableViewCell@property (nonatomic,strong)  RepairOrderModel* model;-(instancetype)initWithTableview:(UITableView *)tableview;+(instancetype)cellWithTableview:(UITableView *)tableview;@property (nonatomic, strong) RepairOrderFrame *statusFrame;@property (nonatomic,strong) NSIndexPath * currentIndexPath;@property (nonatomic,copy) PushPhotoBigVCBlock block;-(void)pushPhotoVC:(PushPhotoBigVCBlock)block;@property (nonatomic,copy) PushRealBlock block1;-(void)pushRealVC:(PushRealBlock)block1;@property (nonatomic,copy) LookReplyBlock block2;-(void)lookReplyDetailView:(LookReplyBlock)block2;@property (nonatomic,copy) PushCommandVCBlock block3;-(void)pushCommandViewController:(PushCommandVCBlock)block3;@end


cell实现文件.m中:

[code]#import "RepairOrderTableViewCell.h"#import "ReplyDetailView.h" // 回复区域// 小号字体#define SmallFont [UIFont systemFontOfSize:12]// 中号字体#define MiddleFont [UIFont systemFontOfSize:14]// 正常字体#define LargeFont [UIFont systemFontOfSize:16]@interface RepairOrderTableViewCell()// 顶部点击区域 (增加手势)@property (nonatomic,strong) UIView * topView;@property (nonatomic,strong) UIImageView * iconView; //图标@property (nonatomic,strong) UILabel * fnameLabel; //业主名@property (nonatomic,strong) UILabel * timeLabel;  //订单时间@property (nonatomic,strong) UILabel * desLabel;   //服务内容  fservicecontent@property (nonatomic,strong) UILabel * addLabel;  //订单地址  faddress@property (nonatomic,strong) UILabel * orderNumLabel;  //工单号码 fordernum@property (nonatomic,strong) UILabel * urgentLabel;  //加急状态 fremindercount@property (nonatomic,strong) UIView * imagesListView;  //图片列表 repairs_imag_list@property (nonatomic,strong) UIButton * sendOrdersBtn;  //派单按钮@property (nonatomic,strong) UILabel * sendStateLabel;  //派单状态@property (nonatomic,strong) UIButton * acceptBtn;  //接受按钮@property (nonatomic,strong) UIButton * commandBtn;  //评论按钮@property (nonatomic,strong) UILabel * countLabel;  //评论数量@property (nonatomic,strong) UIButton * detailBtn;  //详情按钮@property (nonatomic,strong) UIImageView * photo1;@property (nonatomic,strong) UIImageView * photo2;@property (nonatomic,strong) UIImageView * photo3;@end@implementation RepairOrderTableViewCell+(instancetype)cellWithTableview:(UITableView *)tableview{    return [[self alloc]initWithTableview:tableview];}-(instancetype)initWithTableview:(UITableView *)tableview{    static NSString * identify = @"RepairOrderCell";    RepairOrderTableViewCell * cell = [tableview dequeueReusableCellWithIdentifier:identify];    if (cell == nil) {        cell = [[RepairOrderTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];    }    // cell的复用问题 先删除所有的回复View  不删除的话 复用cell会重影    [self deleteReplyView];    self.photo1.hidden = NO;      self.photo2.hidden = NO;    self.photo3.hidden = NO;    return cell;}-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {        self.selectionStyle = UITableViewCellSelectionStyleNone;        [self defaultSubViews];//这里初始化各个子视图,不要给frame赋值    }    return self;}- (void)defaultSubViews{    // 1.头像    self.iconView = [[UIImageView alloc] init];    [self.contentView addSubview:self.iconView];    // 2.业主名    self.fnameLabel = [[UILabel alloc] init];    self.fnameLabel.font = LargeFont;    [self.contentView addSubview:self.fnameLabel];    // 3.日期    self.timeLabel = [[UILabel alloc] init];    self.timeLabel.font = SmallFont;    [self.contentView addSubview:self.timeLabel];    // 4. 地址    self.addLabel = [[UILabel alloc] init];    self.addLabel.font = LargeFont;    [self.contentView addSubview:self.addLabel];    //5.单号    self.orderNumLabel = [[UILabel alloc] init];    self.orderNumLabel.font = SmallFont;    [self.contentView addSubview:self.orderNumLabel];    // 6.加急    self.urgentLabel = [[UILabel alloc] init];    self.urgentLabel.font = MiddleFont;    [self.contentView addSubview:self.urgentLabel];    // 7.服务内容    self.desLabel = [[UILabel alloc] init];    self.desLabel.font = MiddleFont;    [self.contentView addSubview:self.desLabel];    // 8.图片列表    self.photo1 = [[UIImageView alloc]init];    self.photo1.userInteractionEnabled = YES;    [self.contentView addSubview:self.photo1];    self.photo2 = [[UIImageView alloc]init];    self.photo2.userInteractionEnabled = YES;    [self.contentView addSubview:self.photo2];    self.photo3 = [[UIImageView alloc]init];    self.photo3.userInteractionEnabled = YES;    [self.contentView addSubview:self.photo3];    UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(photoTap)];    [self.photo1 addGestureRecognizer:tap];    UITapGestureRecognizer * tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(photoTap)];    [self.photo2 addGestureRecognizer:tap2];    UITapGestureRecognizer * tap3 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(photoTap)];    [self.photo3 addGestureRecognizer:tap3];    // 9.派单按钮    self.sendOrdersBtn = [[UIButton alloc] init];    self.sendOrdersBtn.backgroundColor = mainColor;    [self.contentView addSubview:self.sendOrdersBtn];    // 10.派单状态    self.sendStateLabel = [[UILabel alloc] init];    self.sendStateLabel.font = MiddleFont;    [self.contentView addSubview:self.sendStateLabel];    // 11.接受按钮    self.acceptBtn = [[UIButton alloc] init];    self.acceptBtn.backgroundColor = mainColor;    [self.contentView addSubview:self.acceptBtn];    // 12.评论按钮    self.commandBtn = [[UIButton alloc] init];    self.commandBtn.backgroundColor = mainColor;    [self.contentView addSubview:self.commandBtn];    // 13.评论数量    self.countLabel = [[UILabel alloc] init];    self.countLabel.font = SmallFont;    [self.contentView addSubview:self.countLabel];    // 14.详情按钮    self.detailBtn = [[UIButton alloc] init];    self.detailBtn.backgroundColor = mainColor;    [self.contentView addSubview:self.detailBtn];    // 16.顶部点击事件    self.topView = [[UIView alloc]init];    [self.contentView addSubview:self.topView];}/** *  在这个方法中设置子控件的frame和显示数据 */- (void)setStatusFrame:(RepairOrderFrame *)statusFrame{    _statusFrame = statusFrame;    // 1.设置数据    [self settingData];    // 2.设置frame    [self settingFrame];}/** *  设置数据 */- (void)settingData{    // 微博数据    RepairOrderModel *dataModel = self.statusFrame.model;    // 1.头像    self.iconView.backgroundColor = mainColor;    // 2.业主名    self.fnameLabel.text = dataModel.frealname;    // 3.日期    self.timeLabel.text = dataModel.fcreatetime;    // 4. 地址    self.addLabel.text = dataModel.faddress;    //5.单号    self.orderNumLabel.text = [NSString stringWithFormat:@"单号:%@",dataModel.fordernum];    // 6.加急    self.urgentLabel.text = @"加急";    // 7.服务内容    self.desLabel.text = dataModel.fservicecontent;    // 8.图片列表    self.photo1.backgroundColor = [UIColor yellowColor];    NSArray * arr = dataModel.repairs_imag_list;    if (arr.count != 0) {        switch (arr.count) {            case 3:            {                self.photo3.hidden = NO;                [self.photo3 sd_setImageWithURL:[NSURL URLWithString:arr[2][@"fimagpath"]]];            }            case 2:            {                self.photo2.hidden = NO;                [self.photo2 sd_setImageWithURL:[NSURL URLWithString:arr[1][@"fimagpath"]]];            }            case 1:            {   self.photo1.hidden = NO;                [self.photo1 sd_setImageWithURL:[NSURL URLWithString:arr[0][@"fimagpath"]]];            }            break;        }    }    else{        self.photo1.hidden = YES;        self.photo2.hidden = YES;        self.photo3.hidden = YES;    }    // 9.派单按钮    [self.sendOrdersBtn setTitle:@"派单" forState:UIControlStateNormal];    // 10.派单状态    self.sendStateLabel.text = @"派单";    // 11.接受按钮    [self.acceptBtn setTitle:@"接受" forState:UIControlStateNormal];    // 12.评论按钮    [self.commandBtn setTitle:@"评论" forState:UIControlStateNormal];    [self.commandBtn addTarget:self action:@selector(pushCommand) forControlEvents:UIControlEventTouchUpInside];    // 13.评论数量    self.countLabel.text = [NSString stringWithFormat:@"%d",dataModel.reply_list.count];    // 14.详情按钮    [self.detailBtn setTitle:@"详情" forState:UIControlStateNormal];    [self.detailBtn addTarget:self action:@selector(replyDetail) forControlEvents:UIControlEventTouchUpInside];    if (self.statusFrame.isOpenReply) {        NSLog(@"创建评论");        [self createReplyView];    }    else{        NSLog(@"删除评论");        [self deleteReplyView];    }}/** *  计算文字尺寸 * *  @param text    需要计算尺寸的文字 *  @param font    文字的字体 *  @param maxSize 文字的最大尺寸 */- (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize{    NSDictionary *attrs = @{NSFontAttributeName : font};    return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;}/** *  设置frame */- (void)settingFrame{    // 1.头像    self.iconView.frame = self.statusFrame.iconF;    self.iconView.layer.cornerRadius = self.statusFrame.iconF.size.width/2;    // 2.业主名    self.fnameLabel.frame = self.statusFrame.nameF;    // 3.日期    self.timeLabel.frame = self.statusFrame.timeF;    // 4. 地址    self.addLabel.frame = self.statusFrame.addF;    //5.单号    self.orderNumLabel.frame = self.statusFrame.orderNumF;    // 6.加急    self.urgentLabel.frame = self.statusFrame.urgentF;    // 7.服务内容    self.desLabel.frame = self.statusFrame.desF;    // 8.图片列表    if (self.statusFrame.model.repairs_imag_list.count != 0) {        switch (self.statusFrame.model.repairs_imag_list.count) {            case 3:            {                self.photo3.frame = self.statusFrame.image3ListF;            }            case 2:            {                self.photo2.frame = self.statusFrame.image2ListF;            }            case 1:            {                self.photo1.frame = self.statusFrame.image1ListF;            }                break;        }    }    // 9.派单按钮    self.sendOrdersBtn.frame = self.statusFrame.sendOrdersBtnF;    self.sendOrdersBtn.layer.cornerRadius = self.statusFrame.sendOrdersBtnF.size.width/2;    // 10.派单状态    self.sendStateLabel.frame = self.statusFrame.sendStateF;    // 11.接受按钮    self.acceptBtn.frame = self.statusFrame.acceptBtnF;    // 12.评论按钮    self.commandBtn.frame = self.statusFrame.commandBtnF;    self.commandBtn.layer.cornerRadius = self.statusFrame.commandBtnF.size.width/2;    // 13.评论数量    self.countLabel.frame = self.statusFrame.countLabelF;    // 14.详情按钮    self.detailBtn.frame = self.statusFrame.detailBtnF;    // 16.增加顶部点击事件:    self.topView.frame = CGRectMake(0, 0, ScreenWidth, CGRectGetMaxY(self.iconView.frame));    self.topView.backgroundColor = [UIColor clearColor];    UITapGestureRecognizer * topViewClickTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topViewClick)];    [self.topView addGestureRecognizer:topViewClickTap];}#pragma mark - 创建评论区域-(void)createReplyView{    [self deleteReplyView];    CGFloat viewY = self.statusFrame.cellHeight;    for (int i = self.statusFrame.repairViewFrameArr.count - 1; i >= 0 ; i --) {        NSLog(@"111111111111111111111111111111  %d",self.statusFrame.repairViewFrameArr.count);        RepairViewFrame * rFrame = self.statusFrame.repairViewFrameArr[i];        RepairViewFrame * rLastFrame;         viewY -= rFrame.viewHeight;        ReplyDetailView * view = [[ReplyDetailView alloc]init];        view.tag = 5000 + i;        view.frame = CGRectMake(0, viewY, ScreenWidth, rFrame.viewHeight);        view.backgroundColor = MYColor(random()%256, random()%256, random()%256);        [self.contentView addSubview:view];    }}#pragma mark - 删除评论区域-(void)deleteReplyView{    for (int i = 0; i < self.statusFrame.repairViewFrameArr.count; i ++) {        ReplyDetailView * view = (ReplyDetailView *)[self.contentView viewWithTag:5000 + i];        [view removeFromSuperview];    }}#pragma mark - 查看大图-(void)photoTap{    if (self.block) {        self.block(self.statusFrame.model.repairs_imag_list);    }}#pragma mark - 进入业主详情-(void)topViewClick{    NSLog(@"业主详情");    if (self.block1) {        self.block1(self.statusFrame.model.frealname);    }}#pragma mark - 查看回复详情-(void)replyDetail{    //先判断是否有回复    if (self.model.reply_list.count == 0) {        return;    }    self.statusFrame.isOpenReply = !self.statusFrame.isOpenReply;    if (self.statusFrame.isOpenReply) {        NSLog(@"打开评论");//        [self createReplyView];    }    else{        NSLog(@"关闭评论");        [self deleteReplyView];    }    if (self.block2) {        self.block2(self.currentIndexPath,self.statusFrame.isOpenReply);    }}#pragma mark - 跳转去评论页面-(void)pushCommand{    if (self.block3) {        self.block3();    }}-(void)pushPhotoVC:(PushPhotoBigVCBlock)block{    if (!self.block) {        self.block = block;    }}-(void)pushRealVC:(PushRealBlock)block1{    if (!self.block1) {        self.block1 = block1;    }}-(void)lookReplyDetailView:(LookReplyBlock)block2{    if (!self.block2) {        self.block2 = block2;    }}-(void)pushCommandViewController:(PushCommandVCBlock)block3{    if (!self.block3) {        self.block3 = block3;    }}


Controller界面就是把model放入cell里

主要代码:

[code]- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    RepairOrderTableViewCell *cell = [RepairOrderTableViewCell cellWithTableview:tableView];    cell.currentIndexPath = indexPath;    NSLog(@"改变前cell高度: %f",cell.statusFrame.cellHeight);    [cell pushPhotoVC:^(NSArray *imageList) {        //图片展示        self.lookImageList = imageList;        [self photoTap];    }];    [cell pushRealVC:^(NSString *frealname) {       //跳转业主详情页        OwnerViewController * ownerVC = [[OwnerViewController alloc]init];        [self.navigationController pushViewController:ownerVC animated:YES];    }];    [cell lookReplyDetailView:^(NSIndexPath *myIndexPath,BOOL isOpen) {        cell.statusFrame.isOpenReply = isOpen;        [cell.statusFrame setModel:cell.statusFrame.model];        NSLog(@"indexPath.row == %d",myIndexPath.row);        //刷新这一行        [tableView reloadRowsAtIndexPaths:@[myIndexPath] withRowAnimation:UITableViewRowAnimationNone];        //        [tableView reloadData];    }];    [cell pushCommandViewController:^{        //跳转去评论页面        OrderCommandViewController * commandVC = [[OrderCommandViewController alloc]init];        [self.navigationController pushViewController:commandVC animated:YES];    }];    cell.model = ((RepairOrderFrame *)self.framesArr[indexPath.row]).model;    cell.statusFrame = self.framesArr[indexPath.row];    return cell;}


左耳笔记 , 怕自己忘了

相关热词搜索:

上一篇:iOS 应用的生命周期 下一篇:如何去掉String的前后空格或某些字符
分享到: 收藏