iOS開發UI篇—使用嵌套模型完成的一個簡單汽車表徵圖展示程式

來源:互聯網
上載者:User

標籤:

iOS開發UI篇—使用嵌套模型完成的一個簡單汽車表徵圖展示程式

一、plist檔案和項目結構圖

說明:這是一個嵌套模型的樣本

二、程式碼範例:

 YYcarsgroup.h檔案代碼:

 1 // 2 //  YYcarsgroup.h 3 //  07-汽車展示(進階) 4 // 5 //  Created by apple on 14-5-28. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 11 @interface YYcarsgroup : NSObject12 @property(nonatomic,copy)NSString *title;13 @property(nonatomic,strong)NSArray *cars;14 15 -(instancetype)initWithDict:(NSDictionary *)dict;16 +(instancetype)carsgroupWithDict:(NSDictionary *)dict;17 @end

YYcarsgroup.m檔案代碼:

 1 // 2 //  YYcarsgroup.m 3 //  07-汽車展示(進階) 4 // 5 //  Created by apple on 14-5-28. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYcarsgroup.h"10 #import "YYcars.h"11 12 @implementation YYcarsgroup13 -(instancetype)initWithDict:(NSDictionary *)dict14 {15     if (self=[super init]) {16         //嵌套的字典轉模型17         self.title=dict[@"title"];18         19         //注意20         NSArray *dictcars=dict[@"cars"];21         //像下面這樣寫可以提高效能22         NSMutableArray *arrayM=[NSMutableArray arrayWithCapacity:dictcars.count];23         for (NSDictionary *dict  in dictcars) {24             YYcars *yycars=[[YYcars alloc]initWithDict:dict];25             [arrayM addObject:yycars];26         }27          // 賦值儲存模型的數組給屬性28         self.cars=arrayM;29     }30     return self;31 }32 33 +(instancetype)carsgroupWithDict:(NSDictionary *)dict34 {35     return [[self alloc]initWithDict:dict];36 }37 @end

YYcars.h檔案

 1 // 2 //  YYcars.h 3 //  07-汽車展示(進階) 4 // 5 //  Created by apple on 14-5-28. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 11 @interface YYcars : NSObject12 @property(nonatomic,copy)NSString *name;13 @property(nonatomic,copy)NSString *icon;14 15 -(instancetype)initWithDict:(NSDictionary *)dict;16 +(instancetype)carsWithDict:(NSDictionary *)dict;17 @end

 YYcars.m檔案

 1 // 2 //  YYcars.m 3 //  07-汽車展示(進階) 4 // 5 //  Created by apple on 14-5-28. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYcars.h"10 11 @implementation YYcars12 13 -(instancetype)initWithDict:(NSDictionary *)dict14 {15     if (self=[super init]) {16         self.name=dict[@"name"];17         self.icon=dict[@"icon"];18     }19     return self;20 }21 +(instancetype)carsWithDict:(NSDictionary *)dict22 {23     return [[self alloc]initWithDict:dict];24 }25 @end

YYViewController.m檔案

  1 //  2 //  YYViewController.m  3 //  07-汽車展示(進階)  4 //  5 //  Created by apple on 14-5-28.  6 //  Copyright (c) 2014年 itcase. All rights reserved.  7 //  8   9 #import "YYViewController.h" 10 #import "YYcarsgroup.h" 11 #import "YYcars.h" 12  13 @interface YYViewController ()<UITableViewDataSource> 14 @property (strong, nonatomic) IBOutlet UITableView *tableview; 15 @property(nonatomic,strong) NSArray *car; 16 @end 17  18 @implementation YYViewController 19  20 - (void)viewDidLoad 21 { 22     [super viewDidLoad]; 23      24     self.tableview.rowHeight=60.f; 25     self.tableview.dataSource=self; 26     NSLog(@"%d",self.car.count); 27 } 28 #pragma mark- 實現懶載入 29 //1.從包中讀取資料 30 //2.字典轉模型 31 //3.返回cars 32 -(NSArray *)car 33 { 34     if (_car==nil) { 35        36         NSString *fullpath= [[NSBundle mainBundle]pathForResource:@"cars_total.plist" ofType:nil]; 37         NSArray  *arrayM=[NSArray arrayWithContentsOfFile:fullpath]; 38          39         NSMutableArray *carsarray=[NSMutableArray array]; 40         for (NSDictionary  *dict in arrayM) { 41             YYcarsgroup *carsgroup=[YYcarsgroup carsgroupWithDict:dict]; 42             [carsarray addObject:carsgroup]; 43         } 44         _car=[carsarray copy]; 45     } 46     return _car; 47 } 48  49  50 #pragma mark-  實現tableview的資料展示 51 //1.設定資料來源,遵守協議 52 //2.返回組 53 //3.返回行 54 //4.每組每行對應的資料 55 //4.1去緩衝中去取cell 56 //4.2若沒有,則建立cell,並蓋章 57 //4.3設定cell的資料 58 //4.4返回cell 59  60 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 61 { 62     return self.car.count; 63 } 64 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 65 { 66     YYcarsgroup *carsgroup=self.car[section]; 67     return carsgroup.cars.count; 68 } 69 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 70 { 71     static NSString *[email protected]"car"; 72     //4.1去緩衝中去取cell 73     UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier]; 74     //4.2若沒有,則建立cell,並蓋章 75     if (cell==nil) { 76         cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; 77     } 78     //4.3設定cell的資料 79     //設定對應的組 80     YYcarsgroup *carsgroup=self.car[indexPath.section]; 81     //設定對應的行 82     YYcars *yycars=carsgroup.cars[indexPath.row]; 83  84     cell.imageView.image=[UIImage imageNamed:yycars.icon]; 85     cell.textLabel.text=yycars.name; 86     //4.4返回cell 87     return cell; 88 } 89  90 //設定每組的標題 91 -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 92 { 93     YYcarsgroup *carsgroup=self.car[section]; 94     return carsgroup.title; 95 } 96  97 //設定索引 98 -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 99 {100     //利用kvc取出所有的標題101     NSArray *title=[self.car  valueForKeyPath:@"title"];102     return title;103 }104 105 //隱藏狀態列106 -(BOOL)prefersStatusBarHidden107 {108     return  YES;109 }110 @end

實現效果:

三、注意點

1.設定索引

代碼如下:

//設定索引-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{    //利用kvc取出所有的標題    NSArray *title=[self.car  valueForKeyPath:@"title"];    return title;}

2.cell的效能最佳化

代碼如下:

   static NSString *[email protected]"car";    //4.1去緩衝中去取cell    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];    //4.2若沒有,則建立cell,並蓋章    if (cell==nil) {        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];    }

請注意:cell內部資料處理的細節。(如何節省記憶體?)

 

  

iOS開發UI篇—使用嵌套模型完成的一個簡單汽車表徵圖展示程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.