zoukankan      html  css  js  c++  java
  • 源码-020501-自定义非等高cell-storyboard

    //
    //  XMGStatusesViewController.m
    //  备课03-不等高的cell-非代码
    
    #import "XMGStatusesViewController.h"
    #import "XMGStatus.h"
    #import "XMGStatusCell.h"
    
    @interface XMGStatusesViewController ()
    @property (strong, nonatomic) NSArray *statuses;
    @end
    
    @implementation XMGStatusesViewController
    
    - (NSArray *)statuses
    {
        if (_statuses == nil) {
            // 加载plist中的字典数组
            NSString *path = [[NSBundle mainBundle] pathForResource:@"statuses.plist" ofType:nil];
            NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
            
            // 字典数组 -> 模型数组
            NSMutableArray *statusArray = [NSMutableArray array];
            for (NSDictionary *dict in dictArray) {
                XMGStatus *status = [XMGStatus statusWithDict:dict];
                [statusArray addObject:status];
            }
            _statuses = statusArray;
        }
        return _statuses;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    }
    
    #pragma mark - Table view data source
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return self.statuses.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        XMGStatusCell *cell = [XMGStatusCell cellWithTableView:tableView];
        cell.status = self.statuses[indexPath.row];
        return cell;
    }
    
    #pragma mark - 代理方法
    /**
     *  返回每一行的高度
     */
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        XMGStatus *staus = self.statuses[indexPath.row];
        return staus.cellHeight;
    }
    /**
     * 返回每一行的估计高度
     * 只要返回了估计高度,那么就会先调用tableView:cellForRowAtIndexPath:方法创建cell,
      再调用tableView:heightForRowAtIndexPath:方法获取cell的真实高度
    */ - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return 200; } @end
    //
    //  XMGStatus.h
    #import <UIKit/UIKit.h>
    
    @interface XMGStatus : NSObject
    @property (strong, nonatomic) NSString *name;
    @property (strong, nonatomic) NSString *text;
    @property (strong, nonatomic) NSString *icon;
    @property (strong, nonatomic) NSString *picture;
    @property (assign, nonatomic, getter=isVip) BOOL vip;
    
    /** cell的高度 */
    @property (assign, nonatomic) CGFloat cellHeight;
    
    + (instancetype)statusWithDict:(NSDictionary *)dict;
    @end
    //
    //  XMGStatusCell.m
    //  07-自定义非等高cell-xib
    #import "XMGStatusCell.h"
    #import "XMGStatus.h"
    
    @interface XMGStatusCell()
    @property (weak, nonatomic) IBOutlet UIImageView *iconView;
    @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
    @property (weak, nonatomic) IBOutlet UIImageView *vipView;
    @property (weak, nonatomic) IBOutlet UILabel *contentLabel;
    @property (weak, nonatomic) IBOutlet UIImageView *pictureView;
    
    @end
    
    @implementation XMGStatusCell
    
    + (instancetype)cellWithTableView:(UITableView *)tableView
    {
        return [tableView dequeueReusableCellWithIdentifier:@"status"];
    }
    
    - (void)awakeFromNib
    {
        // 设置label每一行文字的最大宽度
        // 为了保证计算出来的数值 跟 真正显示出来的效果 一致
        self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
    }
    
    - (void)setStatus:(XMGStatus *)status
    {
        _status = status;
        
        if (status.isVip) {
            self.nameLabel.textColor = [UIColor orangeColor];
            self.vipView.hidden = NO;
        } else {
            self.nameLabel.textColor = [UIColor blackColor];
            self.vipView.hidden = YES;
        }
        
        self.nameLabel.text = status.name;
        self.iconView.image = [UIImage imageNamed:status.icon];
        if (status.picture) {
            self.pictureView.hidden = NO;
            self.pictureView.image = [UIImage imageNamed:status.picture];
        } else {
            self.pictureView.hidden = YES;
        }
        self.contentLabel.text = status.text;
        
        // 强制布局
        [self layoutIfNeeded];
        
        // 计算cell的高度
        if (self.pictureView.hidden) { // 没有配图
            status.cellHeight = CGRectGetMaxY(self.contentLabel.frame) + 10;
        } else { // 有配图
            status.cellHeight = CGRectGetMaxY(self.pictureView.frame) + 10;
        }
    }
    
    @end
    本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji
  • 相关阅读:
    2021 6 3
    2021 5月 读书笔记
    2021 6 1
    第十三周 2021.05.30
    spring security permitAll不生效
    springboot配置jpa提示Unable to resolve name [mysql] as strategy
    element el-form-item el-input宽度设置
    vue+element表格中使用render函数(if判断处理)
    elementui移除tab报Avoided redundant navigation to current location: ***
    el-dropdown-item添加@click不生效
  • 原文地址:https://www.cnblogs.com/laugh/p/6445657.html
Copyright © 2011-2022 走看看