/// 控制层
#import "HMViewController.h" #import "HMMessageModel.h" #import "HMMessageCell.h" #import "HMMessageFrameModel.h" @interface HMViewController ()<UITableViewDataSource,UITableViewDelegate> @property (nonatomic, strong)NSMutableArray *messages; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (NSMutableArray *)messages { if (_messages == nil) { NSArray * array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"messages.plist" ofType:nil]]; NSMutableArray *messageArr = [NSMutableArray array]; for (NSDictionary *dict in array) { HMMessageModel *messga = [HMMessageModel messageWithDict:dict]; HMMessageFrameModel *fm = [[HMMessageFrameModel alloc]init]; fm.message = messga; [messageArr addObject:fm]; } _messages = messageArr; } return _messages; } //隐藏状态栏 - (BOOL)prefersStatusBarHidden { return YES; } #pragma mark tableview数据源方法 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.messages.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { HMMessageFrameModel *model = self.messages[indexPath.row]; return model.cellH; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { HMMessageCell *cell = [HMMessageCell messageCellWithTableView:tableView]; HMMessageFrameModel *model = self.messages[indexPath.row]; cell.frameMessage = model; return cell; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
#import <UIKit/UIKit.h> @interface HMViewController : UIViewController @end
/// model.h
#import <Foundation/Foundation.h> typedef enum { HMMessageModelGatsby = 0,//Gatsby HMMessageModelJobs//Jobs }HMMessageModelType; @interface HMMessageModel : NSObject //正文 @property (nonatomic, copy)NSString *text; //时间 @property (nonatomic, copy)NSString *time; //发送类型 @property (nonatomic, assign)HMMessageModelType type; - (instancetype)initWithDict:(NSDictionary *)dict; + (instancetype)messageWithDict:(NSDictionary *)dict; @end
*****model.m
#import "HMMessageModel.h" @implementation HMMessageModel - (instancetype)initWithDict:(NSDictionary *)dict { if (self = [super init]) { [self setValuesForKeysWithDictionary:dict]; } return self; } + (instancetype)messageWithDict:(NSDictionary *)dict { return [[self alloc] initWithDict:dict]; } @end
******modelframe.h
#import <Foundation/Foundation.h> @class HMMessageModel; @interface HMMessageFrameModel : NSObject //时间的frame @property (nonatomic, assign,readonly)CGRect timeF; //正文的frame @property (nonatomic, assign,readonly)CGRect textViewF; //图片 @property (nonatomic, assign,readonly)CGRect iconF; //cell @property (nonatomic, assign,readonly)CGFloat cellH; //数据模型 @property (nonatomic, strong)HMMessageModel *message; @end
******modelframe.m
#import "HMMessageFrameModel.h" #import "Constant.h" #import "HMMessageModel.h" @implementation HMMessageFrameModel - (void)setMessage:(HMMessageModel *)message { _message = message; CGFloat padding = 10; //1. 时间 CGFloat timeX = 0; CGFloat timeY = 0; CGFloat timeW = bScreenWidth; CGFloat timeH = bNormalH; _timeF = CGRectMake(timeX, timeY, timeW, timeH); //2.头像 CGFloat iconX; CGFloat iconY = CGRectGetMaxY(_timeF); CGFloat iconW = bIconW; CGFloat iconH = bIconH; if (message.type == HMMessageModelGatsby) {//自己发的 iconX = bScreenWidth - iconW - padding; }else{//别人发的 iconX = padding; } _iconF = CGRectMake(iconX, iconY, iconW, iconH); //3.正文 CGFloat textX; CGFloat textY = iconY; CGSize textMaxSize = CGSizeMake(150, MAXFLOAT); CGSize textRealSize = [message.text boundingRectWithSize:textMaxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:bBtnFont} context:nil].size; if (message.type == HMMessageModelGatsby) { textX = bScreenWidth - iconW - padding - textMaxSize.width; }else{ textX = padding + iconW; } // _textViewF = CGRectMake(textX, textY, <#CGFloat width#>, <#CGFloat height#>) _textViewF = (CGRect){{textX,textY},textRealSize}; //4.cell高度 CGFloat iconMaxY = CGRectGetMaxY(_iconF); CGFloat textMaxY = CGRectGetMaxY(_textViewF); _cellH = MAX(iconMaxY, textMaxY); } @end
////****cell.h
#import <UIKit/UIKit.h> @class HMMessageFrameModel; @interface HMMessageCell : UITableViewCell + (instancetype)messageCellWithTableView:(UITableView *)tableview; //frame 的模型 @property (nonatomic, strong)HMMessageFrameModel *frameMessage; @end
////****cell.m
#import "HMMessageCell.h" #import "HMMessageFrameModel.h" #import "HMMessageModel.h" #import "Constant.h" @interface HMMessageCell() //时间 @property (nonatomic, weak)UILabel *time; //正文 @property (nonatomic, weak)UIButton *textView; //用户头像 @property (nonatomic, weak)UIImageView *icon; @end @implementation HMMessageCell + (instancetype)messageCellWithTableView:(UITableView *)tableview { static NSString *ID = @"messageCell"; HMMessageCell *cell = [tableview dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { cell = [[self alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } return cell; } // 初始化控件 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { //1.时间 UILabel *time = [[UILabel alloc]init]; time.textAlignment = NSTextAlignmentCenter; time.font = [UIFont systemFontOfSize:13.0f]; [self.contentView addSubview:time]; self.time = time; //1.正文 UIButton *textView = [[UIButton alloc]init]; textView.backgroundColor = [UIColor grayColor]; textView.titleLabel.font = bBtnFont; textView.titleLabel.numberOfLines = 0;//自动换行 [self.contentView addSubview:textView]; self.textView = textView; //1.头像 UIImageView *icon = [[UIImageView alloc]init]; [self.contentView addSubview:icon]; self.icon = icon; } return self; } // 设置位置和值 - (void)setFrameMessage:(HMMessageFrameModel *)frameMessage { _frameMessage = frameMessage; HMMessageModel *model = frameMessage.message; //1.时间 self.time.frame = frameMessage.timeF; self.time.text = model.time; //2.头像 self.icon.frame = frameMessage.iconF; if (model.type == HMMessageModelGatsby) { self.icon.image = [UIImage imageNamed:@"Gatsby"]; }else{ self.icon.image = [UIImage imageNamed:@"Jobs"]; } //3.正文 self.textView.frame = frameMessage.textViewF; [self.textView setTitle:model.text forState:UIControlStateNormal]; } @end
时间: 2024-10-06 00:28:39