码迷,mamicode.com
首页 > 移动开发 > 详细

iOS_10_tableView的简单使用_红楼十二钗

时间:2014-07-26 15:23:23      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:ios

最终效果图:

bubuko.com,布布扣



方式1,用字典数组


BeyondViewController.h

//
//  BeyondViewController.h
//  10_tableView
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface BeyondViewController : UIViewController

@end





BeyondViewController.m


//
//  BeyondViewController.m
//  10_tableView
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondViewController.h"
#define kHeader @"header"
#define kFooter @"footer"
#define kGirlsArr @"girls"

@interface BeyondViewController ()<UITableViewDataSource>
{
    // 假数据
    NSArray *_array;
}
@end

@implementation BeyondViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 假数据 方式1 用字典
    _array = @[ @{kHeader: @"十二钗正册",
                 kGirlsArr:@[@"林黛玉",@"薛宝钗",@"贾元春",@"贾探春",@"史湘云",@"妙玉",@"贾迎春",@"贾惜春",@"王熙凤",@"贾巧姐",@"李纨",@"秦可卿"],
                 kFooter:@"红楼梦"
                 },
               @{kHeader: @"十二钗副册",
                 kGirlsArr:@[@"香菱",@"薛宝琴",@"尤二姐",@"尤三姐",@"邢岫烟",@"李纹",@"李绮",@"夏金桂",@"秋桐",@"小红",@"龄官",@"娇杏"],
                 kFooter:@"红楼梦"
                 },
               @{kHeader: @"十二钗又副册",
                 kGirlsArr:@[@"晴雯",@"袭人",@"平儿",@"鸳鸯",@"紫鹃",@"莺儿",@"玉钏",@"金钏",@"彩云",@"司棋",@"芳官",@"麝月"],
                 kFooter:@"红楼梦"
                 }
               ];
    // 假数据 方式2 用类封装
    
    // 样式只有两种 Grouped Plain
	UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
    // 数据源
    tableView.dataSource = self;
    // 添加到self.view
    [self.view addSubview:tableView];
}
// 数据源方法,特例,重要~ 一共有多少个分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return _array.count;
}
// 数据源方法,每一组,有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // 返回数组中对应的字典的长度
    return [[_array[section] objectForKey:kGirlsArr] count];
}
// 数据源方法,每一组的每一行应该显示怎么的界面(含封装的数据),重点!!!必须实现否则,Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Beyond";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil) {
        // 如果池中没取到,则重新生成一个cell
        /*
            cell的4种样式:
            1,default   左图右文字
            2,subtitle  左图  上文字大    下文字小
            3,value 1   左图  左文字大    右文字小
            3,value 2   恶心  左文字小    右文字大
         */
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    // 设置cell中独一无二的内容
    cell.textLabel.text = [_array[indexPath.section] objectForKey:kGirlsArr][indexPath.row];
    // 返回cell
    return cell;
}
// 数据源方法,组的开头显示什么标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [_array[section] objectForKey:kHeader];
}
// 数据源方法,,组的最后显示什么标题
//- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
//{
//    return [_array[section] objectForKey:kFooter];
//}


@end




方式2,用类(model)代替数组中的字典

TwelveBeauties.h

//
//  TwelveBeauties.h
//  10_tableView
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <Foundation/Foundation.h>
// 对应 viewController.m中的成员数组中的一个成员  --> 字典
@interface TwelveBeauties : NSObject
// UI控件连线时用weak,字符串用copy,其他对象用strong
@property (nonatomic,copy) NSString *header;
@property (nonatomic,copy) NSString *footer;
@property (nonatomic,strong) NSArray *girls;
// 提供一个类方法,一个以类名开头的构造方法(返回id亦可)
+ (TwelveBeauties *)twelveBeautiesWithHeader:(NSString *)header footer:(NSString *)footer girls:(NSArray *)girls;
@end


TwelveBeauties.m

//
//  TwelveBeauties.m
//  10_tableView
//
//  Created by beyond on 14-7-26.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "TwelveBeauties.h"

@implementation TwelveBeauties
// 提供一个类方法,一个以类名开头的构造方法(返回id亦可)
+ (TwelveBeauties *)twelveBeautiesWithHeader:(NSString *)header footer:(NSString *)footer girls:(NSArray *)girls
{
    TwelveBeauties *twelveBeauties = [[TwelveBeauties alloc]init];
    twelveBeauties.header = header;
    twelveBeauties.footer = footer;
    twelveBeauties.girls = girls;
    return twelveBeauties;
}@end


BeyondViewController.m

//
//  BeyondViewController.m
//  10_tableView
//
//  Created by beyond on 14-7-25.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondViewController.h"
#import "TwelveBeauties.h"

@interface BeyondViewController ()<UITableViewDataSource>
{
    // 假数据
    NSArray *_array;
}
@end

@implementation BeyondViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
// 假数据 方式1 用字典
/*
     _array = @[ @{kHeader: @"十二钗正册",
     kGirlsArr:@[@"林黛玉",@"薛宝钗",@"贾元春",@"贾探春",@"史湘云",@"妙玉",@"贾迎春",@"贾惜春",@"王熙凤",@"贾巧姐",@"李纨",@"秦可卿"],
     kFooter:@"红楼梦"
     },
     @{kHeader: @"十二钗副册",
     kGirlsArr:@[@"香菱",@"薛宝琴",@"尤二姐",@"尤三姐",@"邢岫烟",@"李纹",@"李绮",@"夏金桂",@"秋桐",@"小红",@"龄官",@"娇杏"],
     kFooter:@"红楼梦"
     },
     @{kHeader: @"十二钗又副册",
     kGirlsArr:@[@"晴雯",@"袭人",@"平儿",@"鸳鸯",@"紫鹃",@"莺儿",@"玉钏",@"金钏",@"彩云",@"司棋",@"芳官",@"麝月"],
     kFooter:@"红楼梦"
     }
     ];
*/
    // 假数据 方式2 用类封装后
    _array = @[
               [TwelveBeauties twelveBeautiesWithHeader:@"十二钗正册" footer:@"红楼梦" girls:@[">@"林黛玉",@"薛宝钗",@"贾元春",@"贾探春",@"史湘云",@"妙玉",@"贾迎春",@"贾惜春",@"王熙凤",@"贾巧姐",@"李纨",@"秦可卿"]],
               [TwelveBeauties twelveBeautiesWithHeader:@"十二钗副册" footer:@"红楼梦" girls:@[@"香菱",@"薛宝琴",@"尤二姐",@"尤三姐",@"邢岫烟",@"李纹",@"李绮",@"夏金桂",@"秋桐",@"小红",@"龄官",@"娇杏"]],
               [TwelveBeauties twelveBeautiesWithHeader:@"十二钗又副册" footer:@"红楼梦" girls:@[@"晴雯",@"袭人",@"平儿",@"鸳鸯",@"紫鹃",@"莺儿",@"玉钏",@"金钏",@"彩云",@"司棋",@"芳官",@"麝月"]]
               ];
    // 样式只有两种 Grouped Plain
	UITableView *tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
    // 数据源
    tableView.dataSource = self;
    // 添加到self.view
    [self.view addSubview:tableView];
}
// 数据源方法,特例,重要~ 一共有多少个分组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return _array.count;
}
// 数据源方法,每一组,有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // 返回数组中对应的字典的长度
    // return [[_array[section] objectForKey:kGirlsArr] count];
    
    // 用数据模型封装后
    TwelveBeauties *twelveBeauties = _array[section];
    return twelveBeauties.girls.count;
}
// 数据源方法,每一组的每一行应该显示怎么的界面(含封装的数据),重点!!!必须实现否则,Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Beyond";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
    if (cell == nil) {
        // 如果池中没取到,则重新生成一个cell
        /*
            cell的4种样式:
            1,default   左图右文字
            2,subtitle  左图  上文字大    下文字小
            3,value 1   左图  左文字大    右文字小
            3,value 2   恶心  左文字小    右文字大
         */
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }
    // 设置cell中独一无二的内容,字典封装假数据
    //cell.textLabel.text = [_array[indexPath.section] objectForKey:kGirlsArr][indexPath.row];
    
    // 用数据模型封装后
    TwelveBeauties *twelveBeauties = _array[indexPath.section];
    cell.textLabel.text = [twelveBeauties.girls objectAtIndex:indexPath.row]  ;
    // 返回cell
    return cell;
}
// 数据源方法,组的开头显示什么标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    // 字典封装假数据
    // return [_array[section] objectForKey:kHeader];
    
    // 用数据模型封装后
    TwelveBeauties *twelveBeauties = _array[section];
    return twelveBeauties.header;
}
// 数据源方法,组的索引的标题(通讯录最右边的竖条)
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    // 用KVC \ KVO 可以一句代码实现
    return @[@"正册",@"副册",@"又副册"]    ;
//    NSMutableArray *array = [NSMutableArray array];
//    for (TwelveBeauties *tb in _array) {
//        [array addObject:tb.header];
//    }
//    NSLog(@"%@",array);
//    return array;
    
}


@end





iOS_10_tableView的简单使用_红楼十二钗,布布扣,bubuko.com

iOS_10_tableView的简单使用_红楼十二钗

标签:ios

原文地址:http://blog.csdn.net/pre_eminent/article/details/38140475

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!