UITableView-不等高的Cell

一.工程链接

链接:
https://pan.baidu.com/s/1tQu-hokF2Uw96emvwxb5vg
密码:okzq

二.开发流程

1.解析数据

a.将数据模型化

#import <Foundation/Foundation.h>

@interface XLWeiBoModel : NSObject

@property (nonatomic,copy) NSString *name;

@property (nonatomic,copy) NSString *time;

@property (nonatomic,copy) NSString *text;

@property (nonatomic,copy) NSString *icon;

@property (nonatomic,copy) NSString *imageName;//与plist文件里面的不相同,测试

+(NSArray *)loadData;

@end

b.利用MJExtension解析数据

+(NSArray *)loadData{
    
    //模型里面的属性名和json数据里面对应的key不同
    [XLWeiBoModel mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
        return @{@"imageName":@"pic"};
    }];
    
    return [XLWeiBoModel mj_objectArrayWithFilename:@"weibo.plist"];
}

2.利用UITableViewController显示数据

利用#warning...可以在某一处留下警告,告诉自己这一部分还没有全部完成

#import "XLTableViewController.h"
#import "MJRefresh.h"
#import "XLWeiBoModel.h"
#import "XLWeiBoCell.h"

@interface XLTableViewController ()

/**存放数据的数组*/
@property (nonatomic,copy) NSArray *weiboModelsArray;

@end

@implementation XLTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"微博";
    
    //给tableView嵌入下拉刷新
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        
        //下拉刷新做的事
        
        //下载数据
        
        [NSThread sleepForTimeInterval:2];
        
        self.weiboModelsArray = [XLWeiBoModel loadData];
        
        //数据下载完毕
        [self.tableView.mj_header endRefreshing];
        
        //刷新列表
        [self.tableView reloadData];
        
    }];
    
    //注册cell 如果没有重复利用的cell就创建一个cell
    [self.tableView registerNib:[UINib nibWithNibName:@"XLWeiBoCell" bundle:nil] forCellReuseIdentifier:@"cellID"];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return _weiboModelsArray.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    XLWeiBoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID" forIndexPath:indexPath];
    
    cell.model = _weiboModelsArray[indexPath.row];
    
    //设置选中之后的样式
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    return cell;
}

@end

3.自定义我们想要显示的Cell

1.利用Xib文件布局并与代码关联

Xib文件

2.重写model的set方法,数据一来就显示数据

将两个约束属性化了,用来控制Cell的高度,如果没有给图片,那么图片的长度以及其与Label的间距都要为0

-(void)setModel:(XLWeiBoModel *)model{
    _model = model;
    
    _iconImageView.image = [UIImage imageNamed:model.icon];
    
    _nameLabel.text = model.name;
    
    _timeLabel.text = model.time;
    
    _contentLabel.text = model.text;
    
    if (model.imageName.length == 0) {
        _heightConstraint.constant = 0;
        _topConstraint.constant = 0;
    }else{
        _heightConstraint.constant = 175;
        _topConstraint.constant = 5;
        _picImageView.image = [UIImage imageNamed:model.imageName];
    }  
}

3.加载Xib文件时,给图片添加手势

- (void)awakeFromNib {
    [super awakeFromNib];
    
    //打开交互能力
    _picImageView.userInteractionEnabled = YES;
    
    //添加点击手势
    UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showImage)];
    [_picImageView addGestureRecognizer:tapGes];
}

-(void)showImage{
    
    //找到窗口的根视图控制器的视图
    UIView *v = [UIApplication sharedApplication].keyWindow.rootViewController.view;
    
    //将cell里面的视图的坐标转化到self.view上
    CGRect orgFrame = [self convertRect:_picImageView.frame toView:v];
    
    [XLPhotoBrowser showImage:_picImageView.image withFrame:orgFrame];
}

4.浏览图片的类

a.提供一个创建自己的类方法

//重写initWithFrame方法 布局
-(instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        
        self.imgView = [[UIImageView alloc] init];
        
        _imgView.contentMode = UIViewContentModeScaleAspectFit;
        
        [self addSubview:_imgView];
        
        //设置背景颜色
        self.backgroundColor = [UIColor blackColor];
        
    }
    return self;
}

+(void)showImage:(UIImage *)img withFrame:(CGRect)orgFrame{
    
    //创建这个视图和屏幕一样大
    XLPhotoBrowser *browser = [[XLPhotoBrowser alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    
    //设置图片
    browser.imgView.image = img;
    
    //设置初始大小
    browser.imgView.frame = orgFrame;
    
    browser.orgFrame = orgFrame;
    
    //显示视图
    [[UIApplication sharedApplication].keyWindow addSubview:browser];
}

b.从原来的位置放大显示

-(void)didMoveToSuperview{
    [UIView animateWithDuration:1 animations:^{
        
        self.imgView.frame = self.bounds;
    }];
}

c.缩小到原来的位置

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [UIView animateWithDuration:1 animations:^{
        
        self.imgView.frame = self.orgFrame;
    }completion:^(BOOL finished) {
        
        [self removeFromSuperview];
    }];
}

5.利用MJRefresh刷新数据

   //给tableView嵌入下拉刷新
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        
        //下拉刷新做的事
        
        //下载数据
        
        [NSThread sleepForTimeInterval:2];
        
        self.weiboModelsArray = [XLWeiBoModel loadData];
        
        //数据下载完毕
        [self.tableView.mj_header endRefreshing];
        
        //刷新列表
        [self.tableView reloadData];
        
    }];

三.运行结果

不等高的Cell
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,076评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,982评论 4 60
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 1,489评论 2 7
  • 这会是小英同志第一次动刀 虽然听说不严重 只是个小手术 但毕竟要在脖子划一刀 以后小英得终身用药 原本她身体就不好...
    茉茉欧尼121阅读 265评论 0 0
  • 有没有瞬间回到当时的感觉 晚饭吃完不让回教室 坐在操场上听着星星点灯或者蓝色土耳其 然后围一圈有说有笑 或者三两成...
    荚大大阅读 361评论 0 0