UITableView 实现汽车品牌(demo)_IOS

看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些最近学习的TableView的知识。下面进入正题,UITableView堪称UIKit里面最复杂的一个控件了,使用起来不算难,但是要用好并不容易。当使用的时候我们必须要考虑到后台数据的设计,tableViewCell的设计和重用以及tableView的效率等问题。

上次介绍的UITableView,这里再做一个UITableView的小程序,汽车品牌,截图如下:

1.1创建项目,这里不多讲。

1.2 把所有汽车品牌的图片放到images.xcassets中,如下图:

1.3创建 plist数据,plist数据里面每个array为一个汽车品牌分组,每个array里面又有一个array,这里面存放每个分组下所有的品牌汽车数据,数据如下图。

1.4数据创建完之后,然后设计页面,页面很简单,直接放一个UItable View就可以了。

2.1后台代码,第一步导入

<UITableViewDataSource,UITableViewDelegate,UIAlertViewDelegate>

只有导入这UItable View的这几个代理,我们才能在后面的代码中使用UItable View的一些相对应的方法。

2.2 创建UItable View控件的属性,和创建一个存储数据的数组,如下。

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

2.3 加载数据,这边先要创建两个模型类来保存数据,国为我们这里的数据都在本地的plist文化中,所以我们要把这个plist里面的数据读取出来保存在

创建的carGroups数组中,而本地的plist文件是一个array类型,而每个array里面又有一个array数组,所以我们要创建两个模型类来保存数据,一个模型类保存外面的array数据,一个模型类来保存array里面的子array数据,然后在模型类里面创建和plist里面对应的数据的属性和方法 

代码如下:

#import <Foundation/Foundation.h>
@interface ZKCarModel : NSObject
//头像
@property(nonatomic,copy)NSString * icon;
//名字
@property(nonatomic,copy)NSString *name;
+(instancetype)CarWithDict:(NSDictionary *)dic;
-(instancetype)initWithDict:(NSDictionary *)dic;
@end

#import "ZKCarModel.h"
@implementation ZKCarModel
-(instancetype)initWithDict:(NSDictionary *)dic
{
 if(self=[super init])
 {
 [self setValuesForKeysWithDictionary:dic];
 }
 return self;
}
+(instancetype)CarWithDict:(NSDictionary *)dic
{
 return [[self alloc] initWithDict:dic];
}
@end
#import <Foundation/Foundation.h>
#import "ZKCarModel.h"
@interface ZKCarGroupModel : NSObject
//题目
@property(nonatomic,copy)NSString *title;
@property(nonatomic,strong)NSArray *cars;
+(instancetype)CarGroupWithDic:(NSDictionary *)dic;
-(instancetype)initWithDict:(NSDictionary *)dic;
@end

#import "ZKCarGroupModel.h"
@implementation ZKCarGroupModel
-(instancetype)initWithDict:(NSDictionary *)dic
{
 if(self=[super init])
 {
 self.title=dic[@"title"];
 NSMutableArray *Array=[NSMutableArray array];
 for (NSDictionary *dict in dic[@"cars"]) {
 ZKCarModel *Car=[ZKCarModel CarWithDict:dict];
 [Array addObject:Car];
 }
 self.cars=Array;
 }
 return self;
}
+(instancetype)CarGroupWithDic:(NSDictionary *)dic
{
 return [[self alloc] initWithDict:dic];
}
@end

2.4,对应数据的模型类创建好以后,开始创建数组懒加载

代码如下:

#import <Foundation/Foundation.h>
@interface ZKCarModel : NSObject
//头像
@property(nonatomic,copy)NSString * icon;
//名字
@property(nonatomic,copy)NSString *name;
+(instancetype)CarWithDict:(NSDictionary *)dic;
-(instancetype)initWithDict:(NSDictionary *)dic;
@end

#import "ZKCarModel.h"
@implementation ZKCarModel
-(instancetype)initWithDict:(NSDictionary *)dic
{
 if(self=[super init])
 {
 [self setValuesForKeysWithDictionary:dic];
 }
 return self;
}
+(instancetype)CarWithDict:(NSDictionary *)dic
{
 return [[self alloc] initWithDict:dic];
}
@end
#import <Foundation/Foundation.h>
#import "ZKCarModel.h"
@interface ZKCarGroupModel : NSObject
//题目
@property(nonatomic,copy)NSString *title;
@property(nonatomic,strong)NSArray *cars;
+(instancetype)CarGroupWithDic:(NSDictionary *)dic;
-(instancetype)initWithDict:(NSDictionary *)dic;
@end

#import "ZKCarGroupModel.h"
@implementation ZKCarGroupModel
-(instancetype)initWithDict:(NSDictionary *)dic
{
 if(self=[super init])
 {
 self.title=dic[@"title"];
 NSMutableArray *Array=[NSMutableArray array];
 for (NSDictionary *dict in dic[@"cars"]) {
 ZKCarModel *Car=[ZKCarModel CarWithDict:dict];
 [Array addObject:Car];
 }
 self.cars=Array;
 }
 return self;
}
+(instancetype)CarGroupWithDic:(NSDictionary *)dic
{
 return [[self alloc] initWithDict:dic];
}
@end

2.5,数据加载完以后,然后就要开始写UItable View中相对应的代理方法了

代码如下:

//设置分区
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
 return self.carGroups.count;
}
//设置每个分区显示多少行数据
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 ZKCarGroupModel *Model=self.carGroups[section];
 return Model.cars.count;
}
//每行显示的数据
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *ID=@"A";
 //从缓存中读取cell
 UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
 //如果缓存中没有cell,创建一个新的cell
 if(cell==nil){
 cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
 }
 //找到当前分区的索引
 ZKCarGroupModel *GroupModel=self.carGroups[indexPath.section];
 //找到当前分区的行
 ZKCarModel *CarModel=GroupModel.cars[indexPath.row];
 //设置cell显示的文字
 cell.textLabel.text=CarModel.name;
 //设置cell显示的图片
 cell.imageView.image=[UIImage imageNamed:CarModel.icon];
 return cell;
}

上面3个代理方法是UItable View中最常用的3个方法。写完这3个方法运行xcode就可以看到数据了。

但这里还有些小问题,这里显示的所有品牌都是从上往下排的,没有一个分组,这样我们想找哪个品牌的汽车并不太好找,所以,我们要把同一个数据的汽车品牌加一个字母表示,这怎么做呢,这就要给UItable View的每个分区加一个头了,使用titleForHeaderInSection代理方法

代码如下:

//设置头样式
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
 //找到当前分区在数组中的索引
 ZKCarGroupModel *Model=self.carGroups[section];

 //返回当前分区的数据中的title
 return Model.title;
}

2.6上面的程序中,在屏幕的最右边还有一个索引,点这个索引就找找到相对应的分区数据,其实这个也很简单,也是调用一个

sectionIndexTitlesForTableView的代理方法,这个方法返回一个array的数组。

代码如下:

//设置索引
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
 return [self.carGroups valueForKeyPath:@"title"];
}

2.7,这个程序中还做了一个当你点击屏幕上每个汽车品牌的时候还会弹出一个对话框,为什么要做这个呢,因为很多时候屏幕上的图片和文字都是可以点击的,所以光做一个静态显示好不是很好,虽然这个对话框好像并没有什么用,但这里只是讲下这个方法的使用

代码如下:

//点击cell时变化
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 //创建对话框
 UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"汽车" message:@"取消" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:@"取消", nil];
 //设置样式
 alertView.tag=1;
 alertView.alertViewStyle=UITableViewCellStyleSubtitle;
 //[alertView ];

 [alertView show];
}

3.1 一个UITableView做的汽车品牌就这样OK了,虽然这并不是一个APP但,这里已经把UITableView的一些常用代理方法都写到了,当然UITableView还有很多代表方法,这里并没有讲,但会了这些以后,在以后的使用中我们可以再来查询,重要的是思想。

以上是UITableView 实现汽车品牌的全部内容,希望对大家有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索uitableview
uitableviewcell详解
ios 汽车品牌 demo、ios 购物车实现demo、ios 点赞功能实现demo、ios登录注册实现demo、ios实现收藏功能demo,以便于您获取更多的相关知识。

时间: 2024-10-31 15:18:45

UITableView 实现汽车品牌(demo)_IOS的相关文章

疯狂猜图汽车品牌答案大全

疯狂猜图汽车品牌答案(一)今天身边很多朋友都在玩疯狂猜图这款小游戏,真是火爆异常啊.这款益智最大的亮点就在于能够不断地扩大玩家的知识面,做一个有见识的人.游戏也很简单,就是看图猜东西.下面小编就带来疯狂猜图所有答案之汽车图文答案.[疯狂猜图所有 答案大全 所有答案图文攻略]

中国传统能源汽车在国际汽车品牌的夹缝中份额下降

摘要: 中国传统能源 汽车 在国际汽车品牌的夹缝中份额下降.认同度低,如今产能过剩又带来新的危机.于是,技术起点较高的中国新能源汽车,就承载着太多弯道超车的希望. 不过,就在 中国传统能源 汽车 在国际汽车品牌的夹缝中份额下降.认同度低,如今产能过剩又带来新的危机.于是,技术起点较高的中国新能源汽车,就承载着太多"弯道超车"的希望. 不过,就在近日,位于上海联通松江营业厅的首个特斯拉充电桩落成.这是继成都之后,中国联通与美国特斯拉汽车公司在充电设施建设合作的再次落地.这意味着,虽然经历

汽车之家双11购车节近50家主流汽车品牌集体入驻

10月31日消息,随着双十一的临近,汽车之家率先备战的双11疯狂 购车节开始进入紧张的倒计时阶段.同期,疯狂购车节优惠幅度再创新高.据了解,购车节招商尚未结束,已经有国内外近50家主流汽车品牌集体入驻.内部人士透露,此次购车节,不仅有宝马.英菲尼迪等豪华品牌亮相,还吸引了一汽丰田.东风标致.长安福特.奇瑞.华晨等备受都市白领追捧的热销品牌.其中不少品牌全系底价大促,最大范围满足多层次消费者的购车需求.除了车企的优惠,汽车之家的 回馈力度也再创新高.活动前期,消费者通过抢金币游戏获得的现金抵扣券,

宝马汽车如何做到Facebook互动率最高的汽车品牌?

根据http://www.aliyun.com/zixun/aggregation/13666.html">Socialbakers的统计,截至2012年第一季,汽车产业是在Facebook上互动率最高的粉丝专页类别.其中以德国汽车品牌BMW的表现最亮眼,除了是规模最大的专页外(从2012年2月到3月初之间即增加了100万名粉丝,目前粉丝数超过1,300万),也是互动率最高的汽车品牌. BMW的粉丝专页鼓励粉丝发图片和分享他们的驾驶体验,作为对专页的最新消息.资讯.及娱乐的回馈.我们可以从

多家汽车品牌开“网络4S店”模式

■数百万元的跑车也开始了网络销售之路. ■新快报记者 周新宇 网上购物你能买到的最贵的东西是什么?近日某商城正式开售兰博基尼跑车,引起了 网友的围观和调侃.众多网民大呼给力,并纷纷下单,过过网购兰博基尼的瘾.有网友调侃:"以后购物车里没有兰博基尼,都不好意思说自己在淘宝混过!" 来七辆!搭不同颜色衣服开 在点击"立即购买"后,有网友表示,"我也点了,爽死了!"经过更多网友的围观以及起哄,事情演变成了一次集体"调戏"著名奢侈品牌

六汽车品牌上淘宝商城网售

本报讯 (记者李斌)继吉利汽车入驻淘宝商城之后,昨天,国内汽车服务运营商浙江和诚汽车集团也正式宣布入驻淘宝商城,将旗下奥迪.沃尔沃.一汽丰田.东风日产.北京现代等6个中高档汽车品牌的部分产品带入淘宝商城旗舰店. 淘宝商城相关负责人表示,汽车品牌还在4月13-18日举办特价周活动,需要购车的浙江淘宝用户可享受各品牌特别的优惠活动.

汽车品牌的社会化媒体营销案例

导读 汽车的品牌营销上我们总是能看到很多创意与亮点存在.这次我们选择了分别在几个不同社交媒体平台,人人.新浪微博.豆瓣比较成功的案例,与大家分享. 1.人人网:移动App+活动营销-大众汽车手机APP "夜摄会" 这个案例定位于喜爱夜生活的青年一族,通过鼓励目标人群通过APP上传主题照片(夜生活照片),集齐勋章,获得奖品. 目标/Goal:尚酷把目标人群锁定为喜欢夜生活的潮流一族,希望通过网络沟通提升品牌偏好. 方案/Solution:尚酷精心打造了一款名为"夜摄会"

3·15晚会,哪些汽车品牌可能中招

今年是<消费者权益保护法>实施20周年,3月15日也是新修<消费者权益保护法>实施首日.同时,"让消费更有尊严"的央视3·15晚会也将在关注中上演. 由于晚会每年都是"重磅"出击,专门揭露知名企业.名牌产品的问题,为防止企业"危机公关",播出之前所有内容严格保密已成为剧组惯例.所有参与节目采访.制作的班底成员甚至总导演都要签订保密协议,一旦透露信息,将立即离职. 笔者了解到,晚会曝光的范围拟定为汽车.家电.食品.卫生.消费

3个汽车品牌的社会化媒体营销案例

21136.html">导读 汽车的品牌营销上我们总是能看到很多创意与亮点存在.这次我们选择了分别在几个不同社交媒体平台,人人.新浪微博.豆瓣比较成功的案例,与大家分享. 1.人人网:移动App+活动营销-大众汽车手机APP "夜摄会" 这个案例定位于喜爱夜生活的青年一族,通过鼓励目标人群通过APP上传主题照片(夜生活照片),集齐勋章,获得奖品. 目标/Goal:尚酷把目标人群锁定为喜欢夜生活的潮流一族,希望通过网络沟通提升品牌偏好. 方案/Solution:尚酷精心打