IOS开发教程第一季之01UI基础day7合并IOS学习007----控件(UITableView03微博)

1.加载xib的两种方法
//加载xib的两种方法
  UINib* nib=[UINib nibWithNibName:@"tgs" bundle:nil];//nil表示使用mainBundle,根据xib文件创建nib对象
  UIView* view=[[[nib instantiateWithOwner:nil options:nil] firstObject]];//获取xib中的某个view对象(控件)
2.微博案例–01创建模型及创建tableViewController

plist文件
在这里插入图片描述
1、直接拖拽一个UITableViewController控件
删除原有的View,以及相应的ViewController类,直接拖拽一个UITableViewController控件,并将其对应的类设置为FRTableViewController,这个类自动指定了UITableViewDatoSource和UITableViewDelegate协议通过继承UITableViewController来实现,而UITableViewController已经指定了这两个协议),此外,还自动指定了一个tableView的类属性,因此不再需要通过拖线的方式来指定tableView这个属性。

2、创建模型类FRWeibo
FRWeibo.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN
//建立数据模型
@interface FRWeibo : UIView
@property(nonatomic,copy) NSString* text;
@property(nonatomic,copy) NSString* icon;
@property(nonatomic,copy) NSString* name;
@property(nonatomic,copy) NSString* picture;
@property(nonatomic,assign,getter=isVip) BOOL* vip;

-(instancetype)initWithDictionary:(NSDictionary*)dict;
+(instancetype)weiboWithDictionary:(NSDictionary*)dict;

@end
NS_ASSUME_NONNULL_END

FRWeibo.m

#import "FRWeibo.h"

@implementation FRWeibo

-(instancetype)initWithDictionary:(NSDictionary*)dict{
  if (self=[super init]) {
    [self setValuesForKeysWithDictionary:dict];
  }
  return self;
}
+(instancetype)weiboWithDictionary:(NSDictionary*)dict{
 return [[self alloc]initWithDictionary:dict];
}
@end

3、FRTableViewController类

#import "FRTableViewController.h"
#import "FRWeibo.h"
@interface FRTableViewController ()
@property(nonatomic,strong)NSArray* weibo;
@end

@implementation FRTableViewController
//懒加载数据
//重写weibo的get方法
-(NSArray*)getWeibo{
  if (_weibo==nil) {
    //获取plist文件地址
     NSString* path=[[NSBundle mainBundle]pathForResource:@"weibos.plist" ofType:nil];
    
     //创建字典数组,从文件中获取字典
     NSArray* arraydict=[NSArray arrayWithContentsOfFile:path];
     
     //创建可变模型数组
     NSMutableArray* modelM=[NSMutableArray array];
     
     //遍历字典数组,并转换成模型,一次添加到模型数组中
     for (NSDictionary* dict in arraydict) {
       //创建模型
       FRWeibo* modelWeibo=[FRWeibo weiboWithDictionary:dict];
       [modelM addObject:modelWeibo];
     }
     //将模型数组赋值给属性
     _weibo=modelM;
  }
 
  //返回类属性weibo
  return _weibo;
  
}

- (void)viewDidLoad {
    [super viewDidLoad];
  
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return self.weibo.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  //创建单元格
  static NSString* cellID=@"weibocellId";//单元格重用id

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"weibocellId" forIndexPath:indexPath];//重用单元格
  if(cell==nil){
    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"weibocellId"];
  }
  //获取模型数据
    FRWeibo* weibocell=self.weibo[indexPath.row];
  //给单元格各个控件赋值,通过模型传递
  //cell.model=weibocell;

  return cell;
}

@end
3.微博案例–02行中加载数据

1、数据模型FRWeibo
FRWeibo.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN
//建立数据模型
@interface FRWeibo : UIView
@property(nonatomic,copy) NSString* text;
@property(nonatomic,copy) NSString* icon;
@property(nonatomic,copy) NSString* name;
@property(nonatomic,copy) NSString* picture;
@property(nonatomic,assign,getter=isVip) NSNumber* vip;

-(instancetype)initWithDictionary:(NSDictionary*)dict;
+(instancetype)weiboWithDictionary:(NSDictionary*)dict;

@end

NS_ASSUME_NONNULL_END

FRWeibo.m

#import "FRWeibo.h"

@implementation FRWeibo

-(instancetype)initWithDictionary:(NSDictionary*)dict{
  if (self=[super init]) {
    [self setValuesForKeysWithDictionary:dict];
  }
  return self;
}
+(instancetype)weiboWithDictionary:(NSDictionary*)dict{
 return [[self alloc]initWithDictionary:dict];
}
@end

2、表格单元格FRTableViewCell类
FRTableViewCell.h

#import <UIKit/UIKit.h>
//#import "FRWeibo.h"
@class FRWeibo;
NS_ASSUME_NONNULL_BEGIN

@interface FRTableViewCell : UITableViewCell
@property(nonatomic,strong)FRWeibo* weibo;
@end

NS_ASSUME_NONNULL_END

FRTableViewCell.m

#import "FRTableViewCell.h"
#import "FRWeibo.h"
#define nameFont [UIFont systemFontOfSize:17]
#define nameFontText [UIFont systemFontOfSize:13]

@class FRWeibo;
@interface FRTableViewCell()
//创建个控件属性,头像,昵称,正文,配图,vip,方便调用
@property(nonatomic,weak)UIImageView* imgViewIcon;
@property(nonatomic,weak)UIImageView* imgVip;
@property(nonatomic,weak)UILabel* lblNickName;
@property(nonatomic,weak)UILabel* lblText;
@property(nonatomic,weak)UIImageView* imgViewPicture;


@end
@implementation FRTableViewCell
//重写weibo属性的set方法
-(void)setWeibo:(FRWeibo *)weibo{
  _weibo=weibo;
  //设置当前单元格中的子控件的数据
  [self setMyData];
  //设置当前单元格中的子控件的frame
  [self setMyFrame];
}

//设置数据的方法
-(void)setMyData{
  FRWeibo* model=self.weibo;
  self.imgViewIcon.image=[UIImage imageNamed:model.icon];//设置头像
  if (model.picture) {
    //有配图
    self.imgViewPicture.image=[UIImage imageNamed:model.picture];//设置配图
    self.imgViewPicture.hidden=NO;
  }else{
    self.imgViewPicture.hidden=YES;
  }
  //设置vip图片是否显示,vip在创建单元格的时候完成
  if (model.isVip) {
    self.imgVip.hidden=NO;
  }else{
    self.imgVip.hidden=YES;
  }
  self.lblNickName.text=model.name;
  self.lblText.text=model.text;
  
}

//设置frame的方法
-(void)setMyFrame{
  //设置各个控件的坐标
  CGFloat margin=10;

  //1.头像
  CGFloat iconW=35;
  CGFloat iconH=35;
  CGFloat iconX=margin;
  CGFloat iconY=margin;
  self.imgViewIcon.frame=CGRectMake(iconX, iconY, iconW, iconH);

  //2.昵称
  //获取昵称字符串
  NSString *nickName = self.lblNickName.text;
  CGFloat nameX = CGRectGetMaxX(self.imgViewIcon.frame) + margin;
  //根据Label中文字的内容,来动态计算Label的高和宽
  CGSize nameSize=[self sizeWithText:nickName andMaxSize:CGSizeMake(MAXFLOAT, MAXFLOAT) andFont:nameFont];
  CGFloat nameW=nameSize.width;
  CGFloat nameH=nameSize.height;
  CGFloat nameY=iconY+(iconH-nameH)/2;
  self.lblNickName.frame=CGRectMake(nameX, nameY, nameW, nameH);
  
  //3.会员
  CGFloat vipW=10;
  CGFloat vipH=10;
  CGFloat vipX=CGRectGetMaxX(self.lblNickName.frame)+margin;
  CGFloat vipY=nameY;
  self.imgVip.frame=CGRectMake(vipX, vipY, vipW, vipH);

  //4.正文
  CGFloat textX=iconX;
  CGFloat textY=CGRectGetMaxX(self.imgViewIcon.frame)+margin;
  CGSize textSize=[self sizeWithText:self.lblText.text andMaxSize:CGSizeMake(394, MAXFLOAT) andFont:nameFontText];
  CGFloat textW=textSize.width;
  CGFloat textH=textSize.height;
  self.lblText.frame=CGRectMake(textX, textY, textW, textH);

  //5.配图
  CGFloat picW=100;
  CGFloat picH=100;
  CGFloat picX=iconX;
  CGFloat picY=CGRectGetMaxX(self.lblText.frame)+margin;
  self.imgViewPicture.frame=CGRectMake(picX, picY, picW, picH);
  
  //6.计算每行的高度
  CGFloat rowHeight=0;
  if (self.weibo.picture) {
    //如果有配图,行高等于配图的最大Y值+margin
    rowHeight=CGRectGetMaxY(self.imgViewPicture.frame)+margin;
  }else{
    //如果没有配图,行高等于正文的最大Y值+margin
    rowHeight=CGRectGetMaxY(self.lblText.frame)+margin;

  }
  
}

//计算文字size的方法,根据给定的字符串、最大字符串、给定的字体来计算文字应该占用的大小
-(CGSize)sizeWithText:(NSString*)text andMaxSize:(CGSize)maxSize andFont:(UIFont*)font{
  NSDictionary* attr=@{NSFontAttributeName:nameFont};
  return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attr context:nil].size;;
}

//重写initWithStyle方法初始化单元格内的各个控件
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  if (self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
    //创建五个子控件,头像,昵称,会员,正文,配图
    UIImageView* imgViewIcon=[[UIImageView alloc]init];//创建一个图像控件
    [self.contentView addSubview:imgViewIcon];
    self.imgViewIcon=imgViewIcon;
    
    UILabel* lblNickName=[[UILabel alloc]init];
    [self.contentView addSubview:lblNickName];
    lblNickName.font=nameFont;//设置正文的字体大小
    self.lblNickName=lblNickName;

    UIImageView* imgVip=[[UIImageView alloc]init];
    imgVip.image=[UIImage imageNamed:@"vip"];//设置vip
    [self.contentView addSubview:imgVip];
    self.imgVip=imgVip;


    UILabel* lblText=[[UILabel alloc]init];
    [self.contentView addSubview:lblText];
    //设置正文文本可以自动换行
    lblText.numberOfLines=0;
    self.lblText=lblText;

    UIImageView* imgViewPicture=[[UIImageView alloc]init];
    [self.contentView addSubview:imgViewPicture];
    self.imgViewPicture=imgViewPicture;
  }
  return self;
}
- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

3、表格控制器类FRTableViewController
FRTableViewController.m

#import "FRTableViewController.h"
#import "FRWeibo.h"
#import "FRTableViewCell.h"
@interface FRTableViewController ()
@property(nonatomic,strong)NSArray* weibos;
@end

@implementation FRTableViewController
//懒加载数据
//重写weibo的get方法
-(NSArray*)weibos{
  if (_weibos==nil) {
    //获取plist文件地址
     NSString* path=[[NSBundle mainBundle]pathForResource:@"weibos.plist" ofType:nil];
    
     //创建字典数组,从文件中获取字典
     NSArray* arraydict=[NSArray arrayWithContentsOfFile:path];
     
     //创建可变模型数组
     NSMutableArray* modelM=[NSMutableArray array];
     
     //遍历字典数组,并转换成模型,一次添加到模型数组中
     for (NSDictionary* dict in arraydict) {
       //创建模型
       FRWeibo* modelWeibo=[FRWeibo weiboWithDictionary:dict];
       [modelM addObject:modelWeibo];
     }
     //将模型数组赋值给属性
     _weibos=modelM;
  }
 
  //返回类属性weibo
  return _weibos;
  
}



- (void)viewDidLoad {
    [super viewDidLoad];
  //self.tableView.rowHeight=300;
  
}

#pragma mark - Table view data source
//返回分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
//返回行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return self.weibos.count;
}

//返回单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  //获取模型数据
  FRWeibo* weibocell=self.weibos[indexPath.row];
  //创建单元格
  static NSString* cellID=@"weibocellId";//单元格重用id
  FRTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];//重用单元格
  if(cell==nil){
    cell=[[FRTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
  }
  
  //给单元格各个控件赋值,通过模型传递
  cell.weibo=weibocell;
    
    
  return cell;
}


//代理方法,返回每行的行高的方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  
  return 300;
}
@end

结果:
在这里插入图片描述

4.微博案例–03直接在模型中设置行高和各控件size

1、模型FRWeibo
FRWeibo.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN
//建立数据模型
@interface FRWeibo : UIView
@property(nonatomic,copy) NSString* text;
@property(nonatomic,copy) NSString* icon;
@property(nonatomic,copy) NSString* name;
@property(nonatomic,copy) NSString* picture;
@property(nonatomic,assign,getter=isVip) NSNumber* vip;

-(instancetype)initWithDictionary:(NSDictionary*)dict;
+(instancetype)weiboWithDictionary:(NSDictionary*)dict;

@end

NS_ASSUME_NONNULL_END

FRWeibo.m

#import "FRWeibo.h"

@implementation FRWeibo

-(instancetype)initWithDictionary:(NSDictionary*)dict{
  if (self=[super init]) {
    [self setValuesForKeysWithDictionary:dict];
  }
  return self;
}
+(instancetype)weiboWithDictionary:(NSDictionary*)dict{
 return [[self alloc]initWithDictionary:dict];
}
@end

2、模型FRWeiboFrame
FRWeiboFrame.h

#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
#import <UIKit/UIkit.h>

#define nameFont [UIFont systemFontOfSize:17]
#define nameFontText [UIFont systemFontOfSize:13]
NS_ASSUME_NONNULL_BEGIN
@class FRWeibo;
@interface FRWeiboFrame : NSObject
@property(nonatomic,strong)FRWeibo* weibo;
//添加frame的特有属性
//头像的frame
@property(nonatomic,assign,readonly)CGRect iconFrame;
//昵称的frame
@property(nonatomic,assign,readonly)CGRect nameFrame;
//vip的frame
@property(nonatomic,assign,readonly)CGRect vipFrame;
//正文的frame
@property(nonatomic,assign,readonly)CGRect textFrame;
//配图的frame
@property(nonatomic,assign,readonly)CGRect picFrame;
//行高
@property(nonatomic,assign,readonly)CGFloat rowHeight;


@end

NS_ASSUME_NONNULL_END

FRWeiboFrame.m

#import "FRWeiboFrame.h"
#import "FRWeibo.h"

#define nameFont [UIFont systemFontOfSize:17]
#define nameFontText [UIFont systemFontOfSize:13]
@implementation FRWeiboFrame
//重写weibo属性(微博数据)的set方法
-(void)setWeibo:(FRWeibo *)weibo{
  _weibo=weibo;
  //计算每个空间的frame和行高
  //设置各个控件的坐标
  CGFloat margin=10;

  //1.头像
  CGFloat iconW=35;
  CGFloat iconH=35;
  CGFloat iconX=margin;
  CGFloat iconY=margin;
  _iconFrame=CGRectMake(iconX, iconY, iconW, iconH);

  //2.昵称
  //获取昵称字符串
  NSString *nickName =_weibo.name;
  CGFloat nameX = CGRectGetMaxX(_iconFrame) + margin;
  //根据Label中文字的内容,来动态计算Label的高和宽
  CGSize nameSize=[self sizeWithText:nickName andMaxSize:CGSizeMake(MAXFLOAT, MAXFLOAT) andFont:nameFont];
  CGFloat nameW=nameSize.width;
  CGFloat nameH=nameSize.height;
  CGFloat nameY=iconY+(iconH-nameH)/2;
  _nameFrame=CGRectMake(nameX, nameY, nameW, nameH);
  
  //3.会员
  CGFloat vipW=10;
  CGFloat vipH=10;
  CGFloat vipX=CGRectGetMaxX(_nameFrame)+margin;
  CGFloat vipY=nameY;
  _vipFrame=CGRectMake(vipX, vipY, vipW, vipH);

  //4.正文
  CGFloat textX=iconX;
  CGFloat textY=CGRectGetMaxX(_iconFrame)+margin;
  CGSize textSize=[self sizeWithText:_weibo.text andMaxSize:CGSizeMake(394, MAXFLOAT) andFont:nameFontText];
  CGFloat textW=textSize.width;
  CGFloat textH=textSize.height;
  _textFrame=CGRectMake(textX, textY, textW, textH);

  //5.配图
  CGFloat picW=100;
  CGFloat picH=100;
  CGFloat picX=iconX;
  CGFloat picY=CGRectGetMaxX(_textFrame)+margin;
  _picFrame=CGRectMake(picX, picY, picW, picH);
  
  //6.计算每行的高度
  CGFloat rowHeight=0;
  if (self.weibo.picture) {
    //如果有配图,行高等于配图的最大Y值+margin
    rowHeight=CGRectGetMaxY(_picFrame)+margin;
  }else{
    //如果没有配图,行高等于正文的最大Y值+margin
    rowHeight=CGRectGetMaxY(_textFrame)+margin;

  }
  _rowHeight=rowHeight;
}

//计算文字size的方法,根据给定的字符串、最大字符串、给定的字体来计算文字应该占用的大小
-(CGSize)sizeWithText:(NSString*)text andMaxSize:(CGSize)maxSize andFont:(UIFont*)font{
  NSDictionary* attr=@{NSFontAttributeName:nameFont};
  return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attr context:nil].size;;
}

@end

3、单元格FRTableViewCell类
FRTableViewCell.h

#import <UIKit/UIKit.h>
//#import "FRWeibo.h"
#import "FRWeiboFrame.h"
@class FRWeibo;
@class FRWeiboFrame;
NS_ASSUME_NONNULL_BEGIN

@interface FRTableViewCell : UITableViewCell
@property(nonatomic,strong)FRWeiboFrame* weiboFrame;

+(instancetype)weiboCellWtihTableView:(UITableView*)tableView;
@end

NS_ASSUME_NONNULL_END

FRTableViewCell.m

#import "FRTableViewCell.h"
#import "FRWeibo.h"
#import "FRWeiboFrame.h"
#define nameFont [UIFont systemFontOfSize:17]
#define nameFontText [UIFont systemFontOfSize:13]

@class FRWeibo;
@interface FRTableViewCell()
//创建个控件属性,头像,昵称,正文,配图,vip,方便调用
@property(nonatomic,weak)UIImageView* imgViewIcon;
@property(nonatomic,weak)UIImageView* imgVip;
@property(nonatomic,weak)UILabel* lblNickName;
@property(nonatomic,weak)UILabel* lblText;
@property(nonatomic,weak)UIImageView* imgViewPicture;


@end
@implementation FRTableViewCell
//重写weiboFrame属性的set方法
-(void)setWeiboFrame:(FRWeiboFrame *)weiboFrame{
  _weiboFrame=weiboFrame;
  //设置当前单元格中的子控件的数据
  [self setMyData];
  //设置当前单元格中的子控件的frame
  [self setMyFrame];
}


//设置数据的方法
-(void)setMyData{
  FRWeibo* model=self.weiboFrame.weibo;
  self.imgViewIcon.image=[UIImage imageNamed:model.icon];//设置头像
  if (model.picture) {
    //有配图
    self.imgViewPicture.image=[UIImage imageNamed:model.picture];//设置配图
    self.imgViewPicture.hidden=NO;
  }else{
    self.imgViewPicture.hidden=YES;
  }
  //设置vip图片是否显示,vip在创建单元格的时候完成
  if (model.isVip) {
    //设置显示会员图片
    self.imgVip.hidden=NO;
    //设置昵称颜色为红色
    self.lblNickName.textColor=[UIColor redColor];
  }else{
    self.imgVip.hidden=YES;
    self.lblNickName.textColor=[UIColor blackColor];

  }
  self.lblNickName.text=model.name;
  self.lblText.text=model.text;
  
}

//设置frame的方法
-(void)setMyFrame{
  //设置各个控件的坐标

  //1.头像
 
  self.imgViewIcon.frame=self.weiboFrame.iconFrame;

  //2.昵称
  //获取昵称字符串
  
  self.lblNickName.frame=self.weiboFrame.nameFrame;
  
  //3.会员
  
  self.imgVip.frame=self.weiboFrame.vipFrame;

  //4.正文
  
  self.lblText.frame=self.weiboFrame.textFrame;

  //5.配图
  
  self.imgViewPicture.frame=self.weiboFrame.picFrame;
  
}


//重写initWithStyle方法初始化单元格内的各个控件
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
  if (self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
    //创建五个子控件,头像,昵称,会员,正文,配图
    UIImageView* imgViewIcon=[[UIImageView alloc]init];//创建一个图像控件
    [self.contentView addSubview:imgViewIcon];
    self.imgViewIcon=imgViewIcon;
    
    UILabel* lblNickName=[[UILabel alloc]init];
    [self.contentView addSubview:lblNickName];
    lblNickName.font=nameFont;//设置正文的字体大小
    self.lblNickName=lblNickName;

    UIImageView* imgVip=[[UIImageView alloc]init];
    imgVip.image=[UIImage imageNamed:@"vip"];//设置vip
    [self.contentView addSubview:imgVip];
    self.imgVip=imgVip;


    UILabel* lblText=[[UILabel alloc]init];
    [self.contentView addSubview:lblText];
    //设置正文文本可以自动换行
    lblText.numberOfLines=0;
    self.lblText=lblText;

    UIImageView* imgViewPicture=[[UIImageView alloc]init];
    [self.contentView addSubview:imgViewPicture];
    self.imgViewPicture=imgViewPicture;
  }
  return self;
}
- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}
+(instancetype)weiboCellWtihTableView:(UITableView*)tableView{
  //创建单元格
  static NSString* cellID=@"weibocellId";//单元格重用id
  FRTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];//重用单元格
  if(cell==nil){
    cell=[[FRTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
  }
  return cell;
}

@end

4、控制器FRTableViewController类
FRTableViewController.m

#import "FRTableViewController.h"
#import "FRWeibo.h"
#import "FRTableViewCell.h"
#import "FRWeiboFrame.h"
@interface FRTableViewController ()
//保存FRWeiboFrame模型的数组,因为frame数据模型里包含的控件大小高低的数据
@property(nonatomic,strong)NSArray* weiboFrames;
@end

@implementation FRTableViewController
//懒加载数据
//重写weibo的get方法
-(NSArray*)weibos{
  if (_weiboFrames==nil) {
    //获取plist文件地址
     NSString* path=[[NSBundle mainBundle]pathForResource:@"weibos.plist" ofType:nil];
    
     //创建字典数组,从文件中获取字典
     NSArray* arraydict=[NSArray arrayWithContentsOfFile:path];
     
     //创建可变模型数组
     NSMutableArray* modelM=[NSMutableArray array];
     
     //遍历字典数组,并转换成模型,一次添加到模型数组中
     for (NSDictionary* dict in arraydict) {
       //创建模型
       FRWeibo* modelWeibo=[FRWeibo weiboWithDictionary:dict];
       //创建一个frame模型
       FRWeiboFrame* modelWeiboFrame=[[FRWeiboFrame alloc]init];
       //把数据模型赋值给了modelWeiboFrame中的微博属
       modelWeiboFrame.weibo=modelWeibo;
       [modelM addObject:modelWeiboFrame];
     }
     //将模型数组赋值给属性
     _weiboFrames=modelM;
  }
 
  //返回类属性weibo
  return _weiboFrames;
  
}



- (void)viewDidLoad {
    [super viewDidLoad];
  //self.tableView.rowHeight=300;
  
}

#pragma mark - Table view data source
//返回分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
//返回行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  return self.weiboFrames.count;
}

//返回单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  //获取模型数据
  FRWeiboFrame* weibocell=self.weiboFrames[indexPath.row];
  //创建单元格
  FRTableViewCell* cell=[FRTableViewCell weiboCellWtihTableView:tableView];
  
  //给单元格各个控件赋值,通过模型传递
  cell.weiboFrame=weibocell;
    

  
  return cell;
}


//代理方法,返回每行的行高的方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  FRWeiboFrame* weiboFrame=self.weiboFrames[indexPath.row];
  return weiboFrame.rowHeight
  ;
}
@end

结果:
可惜最后没有实现,太晚了,不改了。

4.控件的属性一定要用weak,UI控件的代理属性必须使用weak
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值