zoukankan      html  css  js  c++  java
  • 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

     

     

      

     

  • 相关阅读:
    fedora20安装hadoop-2.5.1
    超简单fedora20(linux)下JDK1.8的安装
    解决A program file was not specified in the launch configuration.问题
    java中的四则运算
    spring util命名空间
    java中常用的数据加密算法
    C语言实现栈
    百度ueditor富文本编辑器的使用
    C#进程管理程序实现
    ABP领域层-仓储
  • 原文地址:https://www.cnblogs.com/zhufeng1994/p/5485845.html
Copyright © 2011-2022 走看看