天天看点

【UITableView】02 - 数据分离 - 从新 - 学习笔记

#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