Tableview中Dynamic Prototypes动态表的使用

Tableview时IOS中应用非常广泛的控件,当需要动态的添加多条不同的数据时,需要用动态表来实现,下面给出一个小例子,适用于不确定Section的数目,并且每个Section中的行数也不同的情况,适合新手。首先,我们来看一下效果图,模拟器上运行的结果:

 


文件结构:

 


下面来说实现过程,首先创建出游记录和出差记录的数据模型:

出游记录:Travel.h

 

@interface Travel : NSObject

@property (nonatomic, strong) NSString *country;
@property (nonatomic, strong) NSString *time;
@property (nonatomic, strong) NSString *expend;
@property (nonatomic, strong) NSString *traffic;

@end

出差记录:BusinessTravel.h

 

 

@interface BusinessTravel : NSObject

@property (nonatomic, strong) NSString *country;
@property (nonatomic, strong) NSString *time;
@property (nonatomic, strong) NSString *expend;
@property (nonatomic, strong) NSString *traffic;
@property (nonatomic, strong) NSString *travelReason;

@end

ViewController中为TableView添加数据:

 

 

@interface ViewController ()

@property(nonatomic,strong) NSMutableArray *travel;
@property(nonatomic,strong) NSMutableArray *businessTravel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //初始化数组,添加模拟数据
    self.travel = [[NSMutableArray alloc] init];
    self.businessTravel = [[NSMutableArray alloc] init];
    
    Travel *t1 = [[Travel alloc] init];
    t1.country = @"韩国";
    t1.time    = @"2016.3.10";
    t1.expend  = @"800";
    t1.traffic = @"飞机";
    [self.travel addObject:t1];
    
    Travel *t2 = [[Travel alloc] init];
    t2.country = @"欧洲";
    t2.time    = @"2016.3.20";
    t2.expend  = @"1000";
    t2.traffic = @"飞机";
    [self.travel addObject:t2];
    
    BusinessTravel *bt = [[BusinessTravel alloc] init];
    bt.country      = @"日本";
    bt.time         = @"2016.1.20";
    bt.expend       = @"1000";
    bt.traffic      = @"飞机";
    bt.travelReason = @"考察";
    [self.businessTravel addObject:bt];
    
}

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

#pragma mark - Table view data source

//设置Section的数目
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    
    return (self.travel.count + self.businessTravel.count);
    
}

//设置每个Section的行数,有多少个Section,这个方法就执行多少次
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    if (section < (self.travel.count)) {   //先往Tableview中添加出游记录,如果是出游记录返回4行,出差记录则返回5行
        return 4;
    } else {
        return 5;
    }
    
}

//设置Section的标题<span style="font-family: Arial, Helvetica, sans-serif;">,有多少个Section,这个方法就执行多少次</span>
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    
    if (section < (self.travel.count)) {
        return @"出游记录";
    } else {
        return @"出差记录";
    }
    
}
//往cell中添加数据
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"reuseIdentifier"];
    }
    
    if (indexPath.section < (self.travel.count)) {  //判断Section,如果是出游记录,则有4行,分别添加cell的标题和内容
        Travel *travel = [self.travel objectAtIndex:[indexPath section]];
        switch (indexPath.row) {
            case SELECT_INDEX_COUNTRY:
                cell.textLabel.text = @"出游国家";
                cell.detailTextLabel.text = travel.country;
                break;
            case SELECT_INDEX_TIME:
                cell.textLabel.text = @"出游时间";
                cell.detailTextLabel.text = travel.time;
                break;
            case SELECT_INDEX_EXPEND:
                cell.textLabel.text = @"出游支出";
                cell.detailTextLabel.text = travel.expend;
                break;
            case SELECT_INDEX_TRAFFIC:
                cell.textLabel.text = @"出游方式";
                cell.detailTextLabel.text = travel.traffic;
                break;
            default:
                break;
        }
    } else {                                          //添加出差记录数据
        BusinessTravel *businessTravel = [self.businessTravel objectAtIndex:[indexPath section]-self.travel.count];
        switch (indexPath.row) {
            case SELECT_INDEX_BUSINESS_COUNTRY:
                cell.textLabel.text = @"出差国家";
                cell.detailTextLabel.text = businessTravel.country;
                break;
            case SELECT_INDEX_BUSINESS_TIME:
                cell.textLabel.text = @"出差时间";
                cell.detailTextLabel.text = businessTravel.time;
                break;
            case SELECT_INDEX_BUSINESS_EXPEND:
                cell.textLabel.text = @"出差支出";
                cell.detailTextLabel.text = businessTravel.expend;
                break;
            case SELECT_INDEX_BUSINESS_TRAFFIC:
                cell.textLabel.text = @"出差方式";
                cell.detailTextLabel.text = businessTravel.traffic;
                break;
            case SELECT_INDEX_TRAVEL_REASON:
                cell.textLabel.text = @"出差原因";
                cell.detailTextLabel.text = businessTravel.travelReason;
                break;
            default:
                break;
        }
    }
    
    return cell;
}

@end


 







 

posted @ 2016-03-29 17:23  细雨落花  阅读(208)  评论(0编辑  收藏  举报