我是UITableView,我負責以表格的方式呈現資料。
我是UITableViewDataSource,我負責接受UITableView的資料委派工作,提供UITableView顯示用的資料。
第1步:建立一個名為"UITableView_UITableViewDataSource"的"Single View Application"專案。
第2步:加入UITableView
第3步:建立UIViewTable的IBOutlet
- 加入UITableView的IBOutlet並取名為"tableView"
第4步:ViewController委派UITableViewDataSource的工作
- 於"ViewController.m"檔中,準備顯示的連絡人資料,宣告一個_contacts陣列變數,並於viewDidLoad方法中建立連絡人陣列,並存於_contacts陣列中
#import "ViewController.h"
@interface ViewController ()
{
//宣告一個存放連絡人的陣列變數,_contacts
NSArray * _contacts;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//建立一個連絡人陣列物件,並存放於_contacts變數中
_contacts = [[NSArray alloc] initWithObjects:
@"Jack"
, @"Eric"
, @"Jason"
, @"Ray"
, @"Kevin"
, @"Jason"
, nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
- 為"ViewController"加上"UITableViewDataSource" protocol協定,於UIViewController後方加上"<UITableViewDataSource>"
@interface ViewController : UIViewController <UITableViewDataSource>
@end
//實作UITableViewDataSource協定
@interface ViewController : UIViewController <UITableviewDataSource>
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end
- 於"ViewController.m"檔中實作 "– tableView:numberOfRowsInSection:"方法,以回傳資料的列數,在此回傳透過陣列回傳個數。
//UITableViewDataSource上的方法,
//用以表示有多少筆資料,
//在此回傳_contacts陣列的個數
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_contacts count];
}
- 於"ViewController.m"檔中實作 "– tableView:cellForRowAtIndexPath:"方法,以依照列數回傳UITableViewCell物件,而UITableViewCell物件即是UITableView用來顯示一筆資料的物件。在此建立UITableViewCell物件,透過indexPath的row屬性取得列數,取出_contacts陣列中的連絡人資訊,並設定給UITableViewCell,最後回傳cell物件,以供UITabelView顯示於畫面上(在此為了更容易了解程式,以直接建立UITableView的方式取得cell物件,正確的寫法應是可將同性質的UITableViewCell拿來重複使用才對)。
//UITableViewDataSource上的方法,
//回傳TableView顯示每列資料用的UITableViewCell
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//建立UITableViewCell物件
UITableViewCell *cell = [[UITableViewCell alloc] init];
//UITableViewCell有個屬性為textLabel,
//其是⼀一個UILabel物件,
//透過setText可設定其顯示的字樣
[cell.textLabel setText:[_contacts objectAtIndex:[indexPath row]]];
//回傳cell物件,以供UITableView顯示在畫面上
return cell;
}
第5步:設定UITableView的dataSource委派
- 將實作"UITableViewDataSource"的ViewController(self),指派至UIViewTable的dataSource屬性中,好將UITableView取得資料的工作委派給ViewController(self)物件。當然,UITableView則會以"UITableViewDataSource"protocol協定向ViewController物件要資料。
- (void)viewDidLoad
{
[super viewDidLoad];
//建立一個連絡人陣列物件,並存放於_contacts變數中
_contacts = [[NSArray alloc] initWithObjects:
@"Jack"
, @"Eric"
, @"Jason"
, @"Ray"
, @"Kevin"
, @"Jason"
, nil];
//將實作UIViewTableDataSource的ViewController(self),
//指派給UITable的dataSource屬性中,
//好將UITableView取得資料的工作,
//委派給ViewController(self)物件。
self.tableView.dataSource = self;
}
第6步:執行
- 這時畫面上會出現6筆資料,這即是UITableView可以以表格的方式顯示資料,當然它會與UITableViewDataSource協定合作,透過實作UITableViewDataSource的物件(在此為ViewController)提供UITableView資料
檔案連結:UITableView_UITableViewDataSource.zip
更多的UITableView資訊: