#import <Foundation/Foundation.h>
@interface SWStudent : NSObject
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *desc;
@property (nonatomic,strong) NSArray *students;
@end
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
//
// ViewController.m
// UITableView 数据分离
//
// Created by mac mini on 15-3-12.
// Copyright (c) 2015 年 SW. All rights reserved.
//
#import "ViewController.h"
#import "SWStudent.h" // 第二步 : 添加刚才创建的类
@interface ViewController () < UITableViewDataSource >
@property ( nonatomic , strong ) NSArray *dataList;
@end
@implementation ViewController
- ( NSArray *)dataList{
if ( _dataList == nil ) {
SWStudent *stu1 = [[ SWStudent alloc ] init ];
stu1. title = @"2013.3.12" ;
stu1. desc = @" 从新开始学习 , 第一遍 " ;
// 生成编号数组
NSMutableArray *arrayM1 = [ NSMutableArray array ];
for ( int i = 0 ; i < 10 ; i++) {
[arrayM1 addObject :[ NSString stringWithFormat : @"%@ - %04d" ,stu1. title ,i]];
}
stu1. students = arrayM1 ;
SWStudent *stu2 = [[ SWStudent alloc ] init ];
stu2. title = @"2013.3.12.20.59" ;
stu2. desc = @" 网开科技 " ;
// 生成编号数组
NSMutableArray *arrayM2 = [ NSMutableArray array ];
for ( int i = 0 ; i < 5 ; i++) {
[arrayM2 addObject :[ NSString stringWithFormat : @"%@ - %03d" ,stu2. title ,i]];
}
stu2.students = arrayM2;
SWStudent *stu3 = [[ SWStudent alloc ] init ];
stu3. title = @" 我是三组头 " ;
stu3. desc = @" 我是三组尾 " ;
// 创建一个生成编号的数组
NSMutableArray *arrayM3 = [ NSMutableArray array ];
for ( int i = 0 ; i < 9 ; i++) {
// 把生成的字符串放到 arrayM3 中(太聪明了)
[arrayM3 addObject :[ NSString stringWithFormat : @"%@ - %02d" ,stu3. title ,i]];
}
stu3. students = arrayM3;
SWStudent *stu4 = [[ SWStudent alloc ] init ];
stu4. title = @" 第四组头 " ;
stu4. desc = @" 第四组尾 " ;
NSMutableArray *arrayM4 = [ NSMutableArray array ];
for ( int i = 0 ; i < 2 ; i++) {
[arrayM4 addObject :[ NSString stringWithFormat : @"%@ - %01d" ,stu4. title ,i]];
}
stu4. students = arrayM4;
_dataList = @[ stu2,stu1,stu3,stu4 ] ;
}
return _dataList ;
}
#pragma mark - UITableView 的数据源方法 <UITableViewDataSource>
// 如果没有实现,默认是 1
- ( NSInteger )numberOfSectionsInTableView:( UITableView *)tableView{
// 返回数组的数据
return self . dataList . count ;
}
// 每个分组中得数据总数
// sction: 分组的编号
- ( NSInteger )tableView:( UITableView *)tableView numberOfRowsInSection:( NSInteger )section
{
// 取出 - 数据列表 - 中得分组的编号 - 自己的理解
// 取出数组中对应的学员信息 - 教师的注释
// 为什么用 SWStudent 这个自己创建的类来创建一个新的对象,并给这个对象赋值的是这个类中的数据列表的分组编号 ?
// 这是因为:在下边返回每一行有多少行数的时候,需要调用的是 “ 学员编号数组 ” 的数组,而 “ 学员编号数组 ” 是在 SWStudent 这个自己创建的类里面创建的。
SWStudent *stu = self . dataList [section];
// 返回 - 对象 stu - 里面 - 学员编号数组 - 的个数 ( 就是你在前边用 SWStudent 这个类中的 student 数组创建了几个数组,把这几个数组中有几行显示出来 )
return stu. students . count ;
}
// 告诉表格控件,每一行 cell 单元格的细节
// indexPath
// @property(nonatomic,readonly) NSInteger section; 分组
// @property(nonatomic,readonly) NSInteger row; 行
- ( UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath *)indexPath{
// 实例化 TableViewCell 时,使用 initWithStyle 方法来进行实例化
UITableViewCell *tableViewCell = [[ UITableViewCell alloc ] initWithStyle : UITableViewCellStyleDefault reuseIdentifier : nil ];
// 取出 indexPath 对应的数据
// indexPath 总共有 2 个属性,一个是 section( 分组 ) ,一个是 row( 行数 )
// 提取出来 student 对象的 “ 学员编号数组 ” 的分组信息
// SWStudent *perpor - 中的 perpor 对象名称要是改写成其他的名称,那么后面的 perpor.students[indexPath.section] 和 perpor.students[indexPath.row] 的 perpor 对象名称也要进行改变
SWStudent *perpor = perpor. students [indexPath. section ];
// 每一个 cell 中得 text 都是由 以 SWStudent 为基础创建的对象 perpor 中得每一行来显示
tableViewCell. textLabel . text = perpor. students [indexPath. row ];
return tableViewCell;
}
- ( NSString *)tableView:( UITableView *)tableView titleForFooterInSection:( NSInteger )section{
// SWStudent *footerTitle = self.dataList[section];
//
// return footerTitle.desc;
// 直接总数组中取出的对象是 id 类型,因为没有明确的类型,因此不能使用点语法 (. 语法 ) ,只能使用 getter 方法
// 这里为什么不能用 student 数组 ? 是因为用 self 调用的 ?
return [ self . dataList [section] desc ];
}
- ( NSString *)tableView:( UITableView *)tableView titleForHeaderInSection:( NSInteger )section{
// SWStudent *headerTitle = self.dataList[section];
// return headerTitle.title;
return [ self . dataList [section] title ];
} @end