您的位置:首页 > 移动开发 > IOS开发

IOS第九天(1:QQ聊天界面frame模型)

2015-08-15 10:37 633 查看
/// 控制层

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: