zoukankan      html  css  js  c++  java
  • iOS_10_tableView的简单使用_红楼十二钗

    终于效果图:




    方式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
    





  • 相关阅读:
    JS基础学习
    Java_iText_PDF—生成PDF工具
    vc++ 编译连接错误and解决方法
    C++ 数据类型【转】
    jsp两种include指令区别
    程序员面试宝典问题及解析
    vc++6.0快捷键
    vue动态绑定图片和背景图
    配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境
    配置webpack中externals来减少打包后vendor.js的体积
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3916812.html
Copyright © 2011-2022 走看看