IOS 之纯代码计算cell的搞定(文字+图片)

1.自从换了工作之后,好久都没有碰自己的博客园了,今天刚好学到这个知识点就想起来写点东西了呀,tableview的使用在我们的应用的十分广泛,我特地的学习了下纯代码计算的cell的高度,在计算的中遇到了几个问题,但是还解决了,我直接上代码啦!!使用的是mvc的框架来实现的高度的计算,这里是自己的写的数据,不是接口的数据。用来测试了!!

2.项目中包括下面几个类:(model,Frame, tableviewcell , controller)这四个类 :(纯代码计算高Demo来说明下)

3.Model类(Home)

Home.h的代码:

    @property (nonatomic,assign)CGFloat cellHeight;

@property (nonatomic,strong)NSString *iconImageview;

@property (nonatomic,strong)NSString *name;

@property (nonatomic,strong)NSString *time;

@property (nonatomic,strong)NSString *content;

@property (nonatomic,strong)NSString *imagePath;

-(instancetype)initWithUser:(NSString *)iconImage name:(NSString *)name time:(NSString *)time content:(NSString *)content imagepath:(NSString *)imagePath;

-(instancetype)initWithUser:(NSString *)iconImage name:(NSString *)name tiem:(NSString *)time content:(NSString *)content;

Home.m的代码:

  -(instancetype)initWithUser:(NSString *)iconImage name:(NSString *)name time:(NSString *)time content:(NSString *)content imagepath:(NSString *)imagePath{

self = [super init];

if (self) {

self.iconImageview = iconImage;

self.name = name;

self.time = time;

self.content = content;

self.imagePath = imagePath;

}

return self;

}

-(instancetype)initWithUser:(NSString *)iconImage name:(NSString *)name tiem:(NSString *)time content:(NSString *)content{

self = [super init];

if (self) {

self.iconImageview = iconImage;

self.name = name;

self.time = time;

self.content = content;

}

return  self;

}

4.Frame类:(HomeFrame)在这里frame里面得到cellHeight 的高度

HomeFrame.h

@class Home;

@interface HomeFrame : NSObject

@property (nonatomic,strong)Home *home;

@property (nonatomic,assign)CGFloat cellHeight;

@property (nonatomic,assign)CGRect iconFrame;

@property (nonatomic,assign)CGRect nameFrame;

@property (nonatomic,assign)CGRect tiemFreme;

@property (nonatomic,assign)CGRect contentFrame;

@property (nonatomic,assign)CGRect pictureFrame;

HomeFrame.m

    

#define SCREENW   [UIScreen mainScreen].bounds.size.width

#import "HomeFrame.h"

#import "Home.h"

@implementation HomeFrame

-(void)setHome:(Home *)home{

_home = home;

// cell的宽度

//计算iconframe

CGFloat iconX = 10;

CGFloat iconY = 10;

CGFloat iconW = 40;

CGFloat iconH = 40;

_iconFrame = CGRectMake(iconX, iconY, iconW, iconH);

//nameFrme

CGSize maxSize = CGSizeMake(SCREENW-10, MAXFLOAT);

CGSize nameSize = [home.name boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:14]} context:nil].size;

CGFloat nameX = CGRectGetMaxX(_iconFrame) + 10;

CGFloat nameY = iconY + (iconH-nameSize.height)/2;

_nameFrame = (CGRect){{nameX,nameY},nameSize};

//timeFrame

CGSize timeSize = [home.time boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:14]} context:nil].size;

CGFloat timeX = CGRectGetMaxX(_nameFrame)+20;

CGFloat timeY = iconY +(iconH - timeSize.height)/2;

_tiemFreme = (CGRect){{timeX,timeY},timeSize};

//contentFrame

// 设置内容

CGSize textSize = [home.content boundingRectWithSize:(CGSize){SCREENW-10,MAXFLOAT} options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil].size;

CGFloat textX = 5;

CGFloat textY = CGRectGetMaxY(_tiemFreme)+10;

_contentFrame = (CGRect){{textX,textY},textSize};

//图片的存在的问题

if (home.imagePath.length == 0) {

self.cellHeight = CGRectGetMaxY(_contentFrame)+10;

return;

}else{

CGFloat  imageW = 100;

CGFloat  imageH = 100;

CGFloat  imageX = 10;

CGFloat  imageY = CGRectGetMaxY(_contentFrame)+10;

self.pictureFrame = CGRectMake(imageX, imageY, imageW, imageH);

self.cellHeight = CGRectGetMaxY(_pictureFrame)+10;

}

}

5.TableviewCell类(TableviewCell)

 TableviewCell.h

@class HomeFrame;

@interface TableViewCell : UITableViewCell

@property (nonatomic,strong)HomeFrame *homeFrame;

+(id)cellWithTable:(UITableView *)tableview;

 TableviewCell.m

  

#import "TableViewCell.h"

#import "Home.h"

#import "HomeFrame.h"

@interface TableViewCell()

@property (nonatomic,strong)UIImageView *iconImageView;

@property (nonatomic,strong)UILabel *nameLabel;

@property (nonatomic,strong)UILabel *timeLabel;

@property (nonatomic,strong)UILabel *contentLabel;

@property (nonatomic,strong)UIImageView *myImageView;

@property (nonatomic,strong)Home *home;

@end

@implementation TableViewCell

- (instancetype)initWithTableView:(UITableView *)tableView

{

TableViewCell *cell = [TableViewCell cellWithTable:tableView];

return cell;

}

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

[self setupCell];

}

return  self;

}

+(id)cellWithTable:(UITableView *)tableview{

static NSString *CellID = @"CELL";

TableViewCell *cell = [tableview dequeueReusableCellWithIdentifier:CellID];

if (cell == nil) {

cell = [[TableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellID];

}

return cell;

}

-(void)setupCell{

//icon

UIImageView *iconImagview = [[UIImageView alloc]init];

iconImagview.contentMode =UIViewContentModeScaleAspectFill;

self.iconImageView = iconImagview;

[self.contentView addSubview:iconImagview];

//name

UILabel *nameLabel = [[UILabel alloc]init];

nameLabel.font = [UIFont systemFontOfSize:14];

self.nameLabel = nameLabel;

[self addSubview:nameLabel];

//time

UILabel *timelabel = [[UILabel alloc]init];

timelabel.font = [UIFont systemFontOfSize:14];

self.timeLabel = timelabel;

[self.contentView addSubview:timelabel];

//content

//name

UILabel *contentlabel = [[UILabel alloc]init];

contentlabel.font = [UIFont systemFontOfSize:14];

contentlabel.numberOfLines = 0;

self.contentLabel = contentlabel;

[self.contentView addSubview:contentlabel];

//picture

UIImageView *pictureImageview = [[UIImageView alloc]init];

pictureImageview.contentMode =UIViewContentModeScaleAspectFill;

self.myImageView = pictureImageview;

[self.contentView addSubview:pictureImageview];

}

-(void)setHomeFrame:(HomeFrame *)homeFrame{

_homeFrame = homeFrame;

//赋值

self.iconImageView.image = [UIImage imageNamed:homeFrame.home.iconImageview];

self.nameLabel.text = [NSString stringWithFormat:@"%@",homeFrame.home.name];

self.timeLabel.text = [NSString stringWithFormat:@"%@",homeFrame.home.time];

self.contentLabel.text = [NSString stringWithFormat:@"%@",homeFrame.home.content];

self.myImageView.image = [UIImage imageNamed:homeFrame.home.imagePath];

//设置frame

self.iconImageView.frame = homeFrame.iconFrame;

self.nameLabel.frame = homeFrame.nameFrame;

self.timeLabel.frame = homeFrame.tiemFreme;

self.contentLabel.frame = homeFrame.contentFrame;

self.myImageView.frame = homeFrame.pictureFrame;

}

7.Controller类:(HomeController)

这里就不写代码了,这里就是用到用tableview实现cell的实现基础的东西,但是里面有个重要的东西,模型开发中的那个数据是通过HomeFrame里面得到的Home这里个模型,要注意这一点,这个很容易犯错的大家注意了!!!

Demo下载地址:http://pan.baidu.com/s/1o89wTlS

 

  

 

时间: 2024-11-09 06:27:59

IOS 之纯代码计算cell的搞定(文字+图片)的相关文章

iOS开发UI篇—以微博界面为例使用纯代码自定义cell程序编码全过程(一)

iOS开发UI篇-以微博界面为例使用纯代码自定义cell程序编码全过程(一) 一.storyboard的处理 直接让控制器继承uitableview controller,然后在storyboard中把继承自uiviewcontroller的控制器干掉,重新拖一个tableview controller,和主控制器进行连线. 项目结构和plist文件 二.程序逻辑业务的处理 第一步,把配图和plist中拿到项目中,加载plist数据(非png的图片放到spooding files中) 第二步,字

iOS开发 纯代码创建UICollectionView

转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xib和StoryBoard创建UICollectionView项目工程的伙伴,需要转换使用纯代码来实现,想避免碰更多的壁,就需要认真了解创建UICollectionView过程了.创建UICollectionView比创建UITableView更加复杂,初始化方式也是相对奇特.以下是使用纯代码创建UI

一分钟搞定AlloyTouch图片轮播

一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,AlloyTouch也可以支持横向滚动,甚至任何属性的运动,因为它的设计的本质就是属性无关,触摸可以反馈到任何属性的运动.所以AlloyTouch制作各种各样的轮播组件还是得心应手. 第一种轮播图如上图所示.下面开始实现的过程. 第0秒 <div id="carousel-container&quo

一招可以搞定文字转语音

想要文字转语音可以试试文字转语音的软件,文字转为语音从某种程度上来说也是给人们带来了便利,如果你不方便查看文件,转为语言的话就可以用耳朵来了解文件的内容,下面小编教大家一个方法,一招可以搞定文字转语音!具体的操作方法如下:1:打开软件,页面中有两个功能选择,进入软件默认的是文字转语音.2:在旁边的操作界面中会有输入文字的提示,在这里输入我们需要进行转换的文字内容就好.3:输入完成之后,就来选择一个文字转换设置,根据自己的需要进行选择,在页面的下面设置的有语音类型和其他设置.4:这些可能还不够,那

猫猫学IOS(十七)UI之纯代码自定义Cell实现新浪微博UI

猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44976175 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 编程思路 代码创建Cell的步骤 1> 创建自定义Cell,继承自UITableViewCell 2> 根据需求,确定控件,并定义属性 3> 用getter方法完成控件的实例化,只创建并添加到contentView,不处理

(素材源码)猫猫学IOS(十七)UI之纯代码自定义Cell实现新浪微博UI

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8580249 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 编程思路 代码创建Cell的步骤 1> 创建自定义Cell,继承自UITableViewCell 2> 根据需求,确定控件,并定义属性 3> 用getter方法完成控件的实例化,只创建并添加到contentView,不处理位置 4&g

swift 之 纯代码创建 cell

初学swift 但是网上只有很多swift用xib创建的cell,就算是有也不是我想要的.今天自己弄了一个不用xib纯代码写的,来上代码 自定义cell 下面是controller 例外说一点懒加载 OC的懒加载 @property (nonatomic, strong) NSMutableArray * dataSource; - (NSMutableArray *)dataSource { if (!_dataSource) { _dataSource = [NSMutableArray a

iOS开发-通过代码自定义cell

一.添加子控件和传递模型数据注意:子控件位置不固定,不能写死时就用代码自定义cell步骤一:将控制器改为继承UITableViewController,然后删除故事板上原来的View,新拖一个TableView,并将Class改为控制器步骤二:新建一个类WeiboCell,继承自UITableViewCell步骤三:在控制器实现文件中导入WeiboCell.h第三个数据源方法 static NSString *ID = @“weibo”: weiboCell *cell = [tableView

ios 用纯代码写程序的时候,navigationController的导航栏的设置

我们都知道,如果用storyBoard设置导航栏很容易,点击左右item的时候,进入下一个界面,导航栏的颜色是跟上一层的是一样的,用纯代码写的时候,可以在当前控制器,和从当前控制器进入到下一个控制器都用代码实现对导航栏的控制,但是,每次都写代码设置,很麻烦,所以,可以这样: 创建一个MainTabBarController的类,在Appdelegate.m里面完成: - (BOOL)application:(UIApplication *)application didFinishLaunchi