猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享,必须精品

素材代码地址:http://blog.csdn.net/u013357243/article/details/44727225

原文地址:http://blog.csdn.net/u013357243?viewmode=contents

先看效果图

代码 ViewController

//ps:新建iOS交流学习群:304570962
可以加猫猫QQ:1764541256 或则微信znycat
让我们一起努力学习吧。
原文:http://blog.csdn.net/u013357243?viewmode=contents
//  NYViewController.m
//  06-汽车品牌带右侧索引
//
//  Created by apple on 15-3-29.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYViewController.h"
#import "NYCarGroup.h"
#import "NYCar.h"

@interface NYViewController () <UITableViewDataSource>

@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *carGroups;

@end

@implementation NYViewController

-(UITableView *)tableView
{
    if (_tableView == nil) {
        _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
        //设置数据源
        _tableView.dataSource = self;
        //加载上去
        [self.view addSubview:_tableView];
    }
    return _tableView;
}

//懒加载
-(NSArray *)carGroups
{
    if (_carGroups == nil) {
        _carGroups = [NYCarGroup carGroups];
    }
    return _carGroups;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

//    NSLog(@"%@", self.carGroups);
    // 调用tableView添加到视图
    [self tableView];
}

#pragma mark - tableView 数据源方法

/**分组总数*/
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.carGroups.count;
}

/**每一组多少行 ,section是第几组*/
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NYCarGroup * group = self.carGroups[section];
    return group.cars.count;
}

/**单元格*/
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //可重用表示符
    static NSString *ID = @"cell";

    //让表格去缓冲区查找可重用cell
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID];

    //如果没有找到可重用cell
    if (cell == nil) {
        //实例化cell
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }

    //设置cell 内容
    //取出数据模型
    NYCarGroup *group = self.carGroups[indexPath.section];
    NYCar *car = group.cars[indexPath.row];

    //设置数据
    cell.imageView.image = [UIImage imageNamed:car.icon];
    cell.textLabel.text = car.name;

    return cell;
}

/**每一组的标题*/
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [self.carGroups[section] title];
}

/** 右侧索引列表*/
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    /*
     索引数组中的"内容",跟分组无关
     索引数组中的下标,对应的是分组的下标
        return @[@"哇哈哈", @"hello", @"哇哈哈", @"hello", @"哇哈哈", @"hello", @"哇哈哈", @"hello"];

     返回self.carGroup中title的数组
        NSMutableArray *arrayM = [NSMutableArray array];
        for (HMCarGroup *group in self.carGroups) {
            [arrayM addObject:group.title];
        }
        return arrayM;

     KVC是cocoa的大招
     用来间接获取或者修改对象属性的方式
     使用KVC在获取数值时,如果指定对象不包含keyPath的"键名",会自动进入对象的内部查找
     如果取值的对象是一个数组,同样返回一个数组
    */
    /*例如:
    NSArray *array = [self.carGroups valueForKeyPath:@"cars.name"];
    NSLog(@"%@", array);
    */
    return [self.carGroups valueForKeyPath:@"title"];

}
@end

模型代码



NYCar.h

//
//  NYCar.h
//  06-汽车品牌带右侧索引
//
//  Created by apple on 15-3-29.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NYCar : NSObject

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

-(instancetype) initWithDict:(NSDictionary *)dict;
+(instancetype) carWithDict:(NSDictionary *)dict;
// 传入一个包含字典的数组,返回一个HMCar模型的数组
+(NSArray *) carsWithArray:(NSArray *)array;
@end

NYCar.m

//
//  NYCar.m
//  06-汽车品牌带右侧索引
//
//  Created by apple on 15-3-29.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYCar.h"

@implementation NYCar

-(instancetype)initWithDict:(NSDictionary *)dict
{
    self = [super init];
    if (self) {
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}

+(instancetype)carWithDict:(NSDictionary *)dict
{
    return [[self alloc] initWithDict:dict];
}

+(NSArray *)carsWithArray:(NSArray *)array
{

    NSMutableArray *arrayM = [NSMutableArray array];
    for (NSDictionary *dict in array) {
        [arrayM addObject:[self carWithDict:dict]];
    }
    return arrayM;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p> {name: %@, icon: %@}",self.class, self, self.name, self.icon ];
}
@end


NYCarGroup.h

//
//  NYCarGroup.h
//  06-汽车品牌带右侧索引
//
//  Created by apple on 15-3-29.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NYCarGroup : NSObject
/** 首字母 */
@property (nonatomic, copy) NSString *title;
/** 车的数组,存放的是HMCar的模型数据 */
@property (nonatomic, strong) NSArray *cars;

-(instancetype) initWithDict:(NSDictionary *)dict;
+(instancetype) carGroupWithDict:(NSDictionary *)dict;
+(NSArray *) carGroups;
@end

NYCarGroup.m

//
//  NYCarGroup.m
//  06-汽车品牌带右侧索引
//
//  Created by apple on 15-3-29.
//  Copyright (c) 2015年 znycat. All rights reserved.
//

#import "NYCarGroup.h"
#import "NYCar.h"
@implementation NYCarGroup
-(instancetype)initWithDict:(NSDictionary *)dict
{
    self = [super init];
    if (self) {
        //        [self setValuesForKeysWithDictionary:dict];
        // dict[@"cars"]存放的是字典的数组
        // 希望将字典的数组转换成HMCar模型的数组
        //        [self setValue:dict[@"cars"] forKey:@"cars"];
        [self setValue:dict[@"title"] forKeyPath:@"title"];
        self.cars = [NYCar carsWithArray:dict[@"cars"]];

    }
    return self;
}

+(instancetype)carGroupWithDict:(NSDictionary *)dict
{
    return [[self alloc] initWithDict:dict];
}

+(NSArray *)carGroups
{
    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"cars_total.plist" ofType:nil]];
    NSMutableArray *arrayM = [NSMutableArray array];
    for (NSDictionary *dict in array) {
        [arrayM addObject:[self carGroupWithDict:dict]];
    }
    return arrayM;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p> {title: %@, cars: %@}", self.class, self, self.title, self.cars];
}

@end


代码偶了

注意点

实现右侧索引:

/* 右侧索引列表/

-(NSArray )sectionIndexTitlesForTableView:(UITableView )tableView



对dataSource复习

@required的两个
/**单元格*/
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
/**每一组多少行 ,section是第几组*/
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

/*分组总数/

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

/*每一组的标题/

-(NSString )tableView:(UITableView )tableView titleForHeaderInSection:(NSInteger)section


出错误了,求助失败[apple mach - o linker error]

听说学iOS百度没用。。。今天真信了,出了个错误,

【apple mach - o linker error】

如图

度娘n久,问了8个iOS相关的学习群,得到的无外乎这样

{

常见错误描述:

Apple Mach-O Linker Error这类错误的错误信息最后一行通常如下:

Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang failed with exit code 1

发生这种错误的原因通常是因为项目中存在同名类造成链接错误。

有可能是你存在两个类名称都一样,也可能是因为你在不同的.m文件中定义了同样的const变量。

这类错误需要自己看错误信息中给出的大长串路径,从中找出你的那个重名类或者变量名称,以此来定位错误位置。

}

好了 我只想说,猫猫自己把代码拷贝出来,然后又关了xcode ,最后重新建立了一个项目,把代码不动得放回,就这么华丽丽的好了。。。。。。。。。。。。

(偶喵了个咪闹)

iOS这部分需要我们大家一起努力啊!

!!!分享我们的成功,喵呜

ps:新建iOS交流学习群:304570962

可以加猫猫QQ:1764541256 或则微信znycat

让我们一起努力学习吧。

原文:http://blog.csdn.net/u013357243?viewmode=contents

时间: 2025-01-06 06:25:11

猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引的相关文章

(素材源码)猫猫学IOS(十三)UI之UITableView学习(下)汽车名牌带右侧索引

猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8544217 原文地址:http://blog.csdn.net/u013357243?viewmode=contents 先看效果图 ps:新建iOS交流学习群:304570962 可以加猫猫QQ:1764541256 或则微信znycat 让我们一起努力学习吧. 原文:http://blog.csdn.net/u013357243?viewmode=contents

猫猫学iOS之二维码学习,快速打开相机读取二维码

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 上一篇文章写了怎么生成二维码,这儿就说说怎么读取吧,反正也很简单,iOS封装的太强大了 步骤呢就是这样: 读取二维码需要导入AVFoundation框架#import <AVFoundation/AVFoundation.h> 1:利用摄像头识别二维码中的内容(模拟器不行). 2:输入(摄像头). 3:由会话将摄像头采集到的二维码图像转换成字符串数据. 4:输

猫猫学iOS之二维码学习,快速生成二维码

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字符串)变成二维码,直接上代码 步骤: 导入CoreImage框架 #import <CoreImage/CoreImage.h> 通过滤镜CIFilter生成二维码 #import

(素材_源码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI

猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u013357243/article/details/44486609 下载地址:http://download.csdn.net/detail/u013357243/8516817 ps1:有想要源码的可以加猫猫微信znycat QQ也可以:1764541256 --视频学习资料素材免费分析,哎自己一

猫猫学IOS(四)UI之半小时搞定Tom猫

话不多说 先上效果 项目源码素材下载地址: Tom猫游戏代码iOS 素材http://blog.csdn.net/u013357243/article/details/44457357 效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 做过android的我表示,android党默哀下把,那个做起来真心痛苦.... 然后呢你需要准备这些素材... 拖拽控件吧,因为这一个项

学习IOS开发UI篇--UITableView/数据模型嵌套/UITableViewCell/Cell的重用

1.UITableView ================================================== UITableView有两种格式:group和plain 2.UITableView如何展示数据 ================================================== UITableView需要一个数据源(dataSource)来显示数据 凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的

iOS开发UI篇—UITableview控件基本使

iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> @interface NJHero : NSObject /** * 头像 */ @property (nonatomic, copy) NSString *icon; /** * 名称 */ @property (nonatomic, copy) NSString *name; /** * 描述 */ @

iOS开发UI篇—UITableview控件使用小结

iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 2.告诉每组一共有多少行 方法:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSIntege

IOS开发UI篇--UITableView的自定义布局==xib布局

利用Xib进行实现 应用场景:像团购网站的列表数据显示,新闻列表显示等(由于该类的显示的数据单元格内容格式相同) (1)主控制器文件,在文件中实现了自己自定义的代理,加载数据, 1 #import "SLViewController.h" 2 #import "SLTgDatas.h" 3 #import "SLTableViewCell.h" 4 #import "SLFooterView.h" 5 #import &quo