天天看點

【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