標籤:
#import "RootViewController.h"#import "Htohero.h"@interface RootViewController ()<UITableViewDataSource>@property (nonatomic, retain) NSArray *apps;@end@implementation RootViewController- (void)viewDidLoad { [super viewDidLoad]; //建立UItableView UITableView *tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain]; //配置屬性 //為tableView指定資料來源,想要成為UItableView的資料來源的實現UItableView的代理方法 //讓控製成為tableView的資料來源 tableView.dataSource = self; //添加俯視圖 [self.view addSubview:tableView]; //釋放 [tableView release];}//有幾部分- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;}//每部分有幾行- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.apps.count;}//每行中顯示的內容- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //cell要實現重用 //定義一個標誌 static NSString *ID = @"hero"; //1.通過緩衝池尋找可迴圈利用的cell //dequeue :出列 (尋找) UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } //擷取物件模型 Htohero *hthero = self.apps[indexPath.row]; cell.imageView.image = hthero.heroimage; cell.textLabel.text = hthero.heroName; cell.detailTextLabel.text = hthero.heroDis; return cell;}//把資料匯入到模型中,然後匯入到定得數組中- (NSArray *)apps{ //這個是實現數句的載入,第一次調用這個方法的時候載入全部資料 //當第二次調用這個方法時不用載入 //使用懶載入 if(_apps == nil) { //1.讀取heros.plist檔案的全路徑 NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil]; //2.載入數組,讀出plist中的資料 NSArray *dictArray = [NSArray arrayWithContentsOfFile:path]; //3.將dicArray 中的字典轉成模型對象,放到新的數組中 //遍曆dictArray數組 //4.建立一個可變數組,把模型存到可變數組中 NSMutableArray *dicArray = [NSMutableArray array]; for (NSDictionary *dic in dictArray) { //初始化模型對象 Htohero *hero = [Htohero heroWithDic:dic]; [dicArray addObject:hero]; } //5.賦值 self.apps = dicArray; } return _apps; }- (void)dealloc{ [_apps release]; [super dealloc];}@end
Htohero.h
#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface Htohero : NSObject@property (nonatomic, copy) NSString *heroName;@property (nonatomic, copy) NSString *heroDis;@property (nonatomic, retain) UIImage *heroimage;//自訂初始化+ (instancetype) heroWithDic:(NSDictionary *)dic;- (instancetype) initWithDic:(NSDictionary *)dic;@end
Htohero.m
#import "Htohero.h"@implementation Htohero+ (instancetype) heroWithDic:(NSDictionary *)dic{ return [[self alloc] initWithDic:dic];}- (instancetype) initWithDic:(NSDictionary *)dic{ if (self = [super init]) { //KVC 字典轉模型,這個不行,因為對象中的資料類型和dic中的資料類型不同 //KVC 通過字串名名字找到字串 //[self setValuesForKeysWithDictionary:dic]; self.heroimage = [UIImage imageNamed:dic[@"icon"]]; self.heroDis = dic[@"intro"]; self.heroName = dic[@"name"]; } return self;}- (void)dealloc{ [_heroDis release]; [_heroName release]; [_heroimage release]; [super dealloc];}@end
iOS中UITableView--(從plist讀取資料到model,實現懶載入, TableView的資料載入)