• 动态切换tableView中的cell的种类


    动态切换tableView中的cell的种类

    为什么要动态切换tableView中cell的种类呢?如果项目经理不出这种需求,你也就见不到这篇文章了:)

    效果:

    源码:

    首先,你要准备3种cell,直接继承系统的就行了.

    //
    //  RootViewController.m
    //  ChangeCell
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "YellowCell.h"
    #import "RedCell.h"
    #import "TitleCell.h"
    
    // ------------------------------
    static NSString *CELL[] = {
        @"TitleCellFlag",
        @"RedCellFlag",
        @"YellowCellFlag",
    };
    typedef enum : NSUInteger {
        Title,
        Red,
        Yellow,
    } CellType;
    // ------------------------------
    
    @interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>
    
    @property (nonatomic, strong) UITableView  *tableView;
    @property (nonatomic, strong) NSString     *changeFlag;  // 切换标签
    
    @property (nonatomic, strong) NSArray      *dataArray;   // 数据源
    @property (nonatomic, strong) NSArray      *redData;     // 红色cell数据
    @property (nonatomic, strong) NSArray      *yellowData;  // 黄色cell数据
    
    @end
    
    @implementation RootViewController
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 初始化TableView
        _tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                                  style:UITableViewStylePlain];
        _tableView.delegate   = self;
        _tableView.dataSource = self;
        [self.view addSubview:_tableView];
        
        // 红色cell数据
        _redData    = @[@"", @"", @"", @""];
        
        // 黄色cell数据
        _yellowData = @[@"", @"", @"", @"", @"", @"", @""];
        
        
        
        // 数据源
        _dataArray = _redData;
        
        // 类型
        _changeFlag = CELL[Red];
        
        // 4秒钟之后切换cell
        [self performSelector:@selector(runSelector:)
                   withObject:nil
                   afterDelay:9];
    }
    
    - (void)runSelector:(id)sender
    {
        // 数据源
        _dataArray = _yellowData;
        
        // 类型
        _changeFlag = CELL[Yellow];
        
        // 重新加载数据
        [_tableView reloadData];
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [_dataArray count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = nil;
        if (indexPath.row == 0) // 第一格cell
        {
            cell = [[TitleCell alloc] initWithStyle:UITableViewCellStyleDefault
                                    reuseIdentifier:CELL[Title]];
            cell.textLabel.font      = [UIFont fontWithName:@"HelveticaNeue-Thin" size:18];
            cell.textLabel.text      = @"YouXianMing";
            cell.textLabel.textColor = [UIColor redColor];
            cell.selectionStyle      = UITableViewCellSelectionStyleNone;
        }
        
        if (indexPath.row != 0) // 其他cell
        {
            if ([_changeFlag isEqualToString:CELL[Red]])
            {
                cell = [[RedCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:CELL[Title]];
                cell.backgroundColor = [UIColor redColor];   // 红色
                cell.selectionStyle  = UITableViewCellSelectionStyleNone;
            }
            
            if ([_changeFlag isEqualToString:CELL[Yellow]])
            {
                cell = [[YellowCell alloc] initWithStyle:UITableViewCellStyleDefault
                                         reuseIdentifier:CELL[Title]];
                cell.backgroundColor = [UIColor yellowColor]; // 黄色
                cell.selectionStyle  = UITableViewCellSelectionStyleNone;
            }
        }
        
        return cell;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row == 0)
        {
            return 70;
        }
        
        if ([_changeFlag isEqualToString:CELL[Red]])
        {
            return 100;
        }
        
        if ([_changeFlag isEqualToString:CELL[Yellow]])
        {
            return 200;
        }
        
        return 0;
    }
    
    @end

    分析:

    用这个来标示重用吧

    有一个标签是用来切换cell类型的,以及对应的数据源

    根据切换标签来决定初始化哪一种cell

    就是这样子实现的.

     
     
     
     
  • 相关阅读:
    ASP.NET备份还原数据库
    ASP.NET的运行原理与运行机制
    Asp.net WebPages框架运行原理浅析(转)
    不要盲目选择定时器
    C# 如何用计时器Timer控件实现停留几秒再做切换窗体的操作
    使用System.Timers.Timer类实现程序定时执行
    C#启动一个外部程序(1)-WinExec
    几种类型的db,以及最新的db排名,看一下
    SharePoint 2013 讨论板列表"Connect to Outlook" 不可用解决方案
    Java可视化编程,基于布局管理器的UI设计
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3939466.html
Copyright © 2020-2023  润新知