第二十二篇:UITableView练习代码

车的品牌展示:

//  Car.h
//  07-UITableView练习-Car
//
//  Created by 瞿杰 on 15/9/28.
//

#import <Foundation/Foundation.h>

@interface Car : NSObject

@property (nonatomic,copy)NSString * icon;
@property (nonatomic,copy)NSString * name;

+ (instancetype)carWithDictionary:(NSDictionary *)dic;
- (instancetype)initWithDictionary:(NSDictionary *)dic;

@end
//
//  Car.m
//  07-UITableView练习-Car
//
//  Created by 瞿杰 on 15/9/28.
//

#import "Car.h"

@implementation Car

+ (instancetype)carWithDictionary:(NSDictionary *)dic{
    return [[self alloc]initWithDictionary:dic];
}
- (instancetype)initWithDictionary:(NSDictionary *)dic{
    if (self = [super init]) {
        self.icon = dic[@"icon"];
        self.name = dic[@"name"];
    }
    return self;
}

@end
//
//  CarGroup.h
//  07-UITableView练习-Car
//
//  Created by 瞿杰 on 15/9/28.
//

#import <Foundation/Foundation.h>

@interface CarGroup : NSObject

@property (nonatomic,copy)NSString * title;
@property(nonatomic, strong)NSArray * cars;

+ (instancetype)carGroupWithDictionary:(NSDictionary * ) dic;
- (instancetype)initWithDictionary:(NSDictionary * )dic;

@end
//
//  CarGroup.m
//  07-UITableView练习-Car
//
//  Created by 瞿杰 on 15/9/28.
//  Copyright © 2015年 itcast. All rights reserved.
//

#import "CarGroup.h"
#import "Car.h"

@implementation CarGroup

+ (instancetype)carGroupWithDictionary:(NSDictionary * ) dic{
    return [[self alloc]initWithDictionary:dic];
}
- (instancetype)initWithDictionary:(NSDictionary * )dic{
    if (self = [super init]) {
        self.title = dic[@"title"];
        NSArray * carsDic = dic[@"cars"];
        NSMutableArray * cars = [NSMutableArray array];
        for(NSDictionary * dict in carsDic){
            Car * car = [Car carWithDictionary:dict];
            [cars addObject:car];
        }
        self.cars = cars ;
    }
    return self;
}

@end

//
//  ViewController.m
//  07-UITableView练习-Car
//
//  Created by 瞿杰 on 15/9/28.
//  Copyright © 2015年 itcast. All rights reserved.
//

#import "ViewController.h"
#import "CarGroup.h"
#import "Car.h"

@interface ViewController ()<UITableViewDataSource , UITableViewDelegate ,UIAlertViewDelegate>

@property (nonatomic , strong)NSArray * carGroup;
@property (weak, nonatomic) IBOutlet UITableView *tableView;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

// 隐藏状态栏
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// 获得cars_total.plist中的数据
- (NSArray *)carGroup{
    if (nil == _carGroup) {
        NSString * path = [[NSBundle mainBundle] pathForResource:@"cars_total.plist" ofType:nil];
        NSArray * group = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray * carGroup = [NSMutableArray array];
        for(NSDictionary * dic in group){
            CarGroup * tmp = [CarGroup carGroupWithDictionary:dic];
            [carGroup addObject:tmp];
        }
        self.carGroup = carGroup ;
    }
    return _carGroup;
}

#pragma mark - 数据源协议UIDataSource中的方法
/** 1.返回组数 */
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return self.carGroup.count ;
}

/** 2.返回第section组的行数 */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    CarGroup * group = self.carGroup[section];
    return group.cars.count;
}

/** 3.返回显示第indexPath.section行第 indexPath.row行的内容 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //(1)可重用的标识符
    NSString * ID = @"carGroup";
    
    // (2)先从数据池中看有没有同一类型的Cell
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];
    //(3)如果没有可重用的cell,就创建一个
    if (cell == nil) {
        NSLog(@"-----(%ld , %ld)",indexPath.section,indexPath.row);
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    //(4)设置cell中的内容
    CarGroup * group = self.carGroup[indexPath.section];
    Car * car = group.cars[indexPath.row];
    cell.textLabel.text = car.name;
    cell.imageView.image = [UIImage imageNamed:car.icon];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

/** 返回第section组的头标题*/
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    CarGroup * group = self.carGroup[section];
    return group.title;
}

//- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
//    
//}

/** 返回每组的头标题,用于显示在屏幕的最右边 */
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
//    NSMutableArray * titleArray = [NSMutableArray array];
//    for(CarGroup * group in self.carGroup){
//        [titleArray addObject:group.title];
//    }
//    return titleArray;
    return [self.carGroup valueForKey:@"title"];
}

#pragma mark - UITableViewDelegate代理协议中的方法

/** 选择点击了indexPath的cell,可做一些事*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
    CarGroup * group = self.carGroup[indexPath.section];
    Car * car = group.cars[indexPath.row];
    
    // 弹出一个UIAlertView窗口
    UIAlertView * alert = [[UIAlertView alloc]initWithTitle:car.name message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    [alert show];
    //可实现alert的UIAlertViewDelegate代理协议中的方法,当对alert操作时,可做相应的反应
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    
}

/**
 *  每一行的高度不一致的时候使用这个方法来设置行高
 */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) return 100;
    return 60;
}

//#pragma mark - alertView的代理方法
///**
// *  点击了alertView上面的按钮就会调用这个方法
// *
// *  @param buttonIndex 按钮的索引,从0开始
// */
//- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
//{
//    if (buttonIndex == 0) return;
//    
//    // 按钮的索引肯定不是0
//    
//    // 1.取得文本框最后的文字
//    NSString *name = [alertView textFieldAtIndex:0].text;
//    //    int row = alertView.tag;
//    //    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
//    //    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];
//    //    cell.textLabel.text = name;
//    
//    // 2.修改模型数据
//    long int row = alertView.tag;
//   CarGroup *carGroup = self.carGroup[row];
//    carGroup.title = name;
//    
//    // 3.告诉tableView重新加载模型数据
//    // reloadData : tableView会向数据源重新请求数据
//    // 重新调用数据源的相应方法取得数据
//    // 重新调用数据源的tableView:numberOfRowsInSection:获得行数
//    // 重新调用数据源的tableView:cellForRowAtIndexPath:得知每一行显示怎样的cell
//    // 全部刷新
//    //    [self.tableView reloadData];
//    
//    // 局部刷新
//    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
//    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];
//}
@end

LOL英雄头像展示:

#import <Foundation/Foundation.h>

@interface QJHero : NSObject

@property (nonatomic , copy)NSString * icon;
@property (nonatomic , copy)NSString * name;
@property (nonatomic , copy)NSString * intro;

+ (instancetype)heroWithDictionary:(NSDictionary *)dic;
- (instancetype)initWithDictionary:(NSDictionary *)dic;

@end

#import "QJHero.h"

@implementation QJHero

+ (instancetype)heroWithDictionary:(NSDictionary *)dic{
    return [[self alloc]initWithDictionary:dic];
}
- (instancetype)initWithDictionary:(NSDictionary *)dic{
    if (self = [super init]) {
        self.icon = dic[@"icon"];
        self.name = dic[@"name"];
        self.intro = dic[@"intro"];
    }
    return self ;
}

@end


//
//  ViewController.m
//  06-UITableView练习-LOL
//
//  Created by 瞿杰 on 15/9/27.
//

#import "ViewController.h"
#import "QJHero.h"

@interface ViewController ()<UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic , strong) NSArray * heros;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 设置每行的行高
    self.tableView.rowHeight = 50;
    
}


- (BOOL)prefersStatusBarHidden{
    
    return YES ;
}
- (NSArray *)heros{
    if (_heros == nil) {
        NSString * path = [[NSBundle mainBundle]  pathForResource:@"heros.plist" ofType:nil];
        NSArray * heros = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray * heroArray = [[NSMutableArray alloc]init];
        for(NSDictionary * dic in heros){
            QJHero * hero = [QJHero heroWithDictionary:dic];
            [heroArray addObject:hero];
        }
        _heros = heroArray ;
    }
    return _heros ;
}
// 1.返回组数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return  1;
}
// 2.返回第section的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return  self.heros.count;
}
// 3.返回显示第indexPath.section行第 indexPath.row行的内容
- (UITableViewCell * )tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString * ID = @"A";
    // 先从数据池中看有没有同一类型的Cell
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];
    // 如果没有就创建一个
    if (cell == nil) {
        NSLog(@"创建一个 --- %ld",(long)indexPath.row);
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    // 设置cell的数据内容
    QJHero * hero = self.heros[indexPath.row];
    cell.textLabel.text = hero.name; //cell.textLabel.backgroundColor = [UIColor redColor];
    cell.detailTextLabel.text = hero.intro;
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    // 设置每行后面的配件类型为 >
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    // 设置背景颜色
    cell.backgroundColor = [UIColor redColor];
    
    return cell ;
}
@end



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章