這是UITableView博客系列的第一篇,使用xib和arc編碼,主要講解一些UITableView使用過程當中簡單的、可是又容易被忽略的東西,並且我會告訴讀者,怎樣在使用了以後就不再會忘記。設計模式
操做的步驟以下,數組
(1)首先拖一個UITableView控件到xib文件上面,以下圖,函數
這沒有什麼,你們不要太過於懼怕UITableView,它只是一個UI控件,跟UIButton和UILabel沒什麼不同,能夠隨意的拖拉。編碼
(2)接下來咱們在對應的xxxViewController中實例化這個UITableView對象,這裏有一個小技巧須要說明一下,先點擊xxxViewController.xib文件,這時候Xcode中顯示的就是xib文件的內容,這時候雙擊xxxViewController.h文件,這時候在小窗口中打開了.h文件,這樣就方便了下面的操做。atom
在xxxViewController.xib文件中點,擊TableView,點擊鼠標右鍵,將其拖動到小窗口的xxxViewController.h文件中,以下圖,spa
(3)釋放鼠標,這時候會彈出下面的界面,.net
這裏我將UITableView對象命名爲theTableView,你能夠將其命名爲任意的名字,這只是一個變量名稱,任意你修改。點擊Connect按鈕,這樣Xcode自動幫咱們在xxxViewController.h文件中生成了property聲明,設計
@property (nonatomic, strong) IBOutlet UITableView *theTableView;
這就是使用xib的好處,節省了不少代碼,不是嗎?代理
(4)這一步驟很重要,設置theTableView的delegate和dataSource爲self,在xxxViewController.xib文件中,右鍵拖動鼠標指向File's Owner,以下圖,code
接着會彈出下面的界面,
先點擊dataSource,再重複上面的操做,而後點擊delegate。這樣的界面操做,至關於執行了self.theTableView.delegate = self;和self.theTableView.dataSource = self;語句。我仍是要提醒一下,要兩次右鍵拖動UITableView指向File's Owner,分別設置dataSource和delegate,順序隨便。
(5)上面都是經過xib來設置界面的,這樣省去了很多代碼,我截圖說明了操做的過程。好了,xib拖動基本就是這麼多內容,下面是代碼實現的細節。
在xxxViewController.m文件中,實現UITableViewControllerDelegate和UITableViewControllerDataSource協議,而且定義一個NSMutableArray實例變量instance variable,命名爲_infoArray,
@interface xxxViewController()<UITableViewDelegate,UITableViewDataSource> { NSMutableArray *_infoArray; } @end
在-viewDidLoad中初始化_infoArray數組內容,
- (void)viewDidLoad { [super viewDidLoad]; _infoArray = [[NSMutableArray alloc] initWithObjects:@"Zero",@"One",@"Two",@"Three",@"Four", nil]; }
好了,這個步驟就是設置theTableView的數據源,有人會問數據源是什麼,簡單來講數據源就是這個theTableView控件要顯示的內容,就像label.text = @"Label內容";,其中@"label內容"字符串就是label控件的數據源。因此咱們能夠看到,UITableView是完美的使用了MVC設計模式來實現的,其中xxxViewController擔任控制者的角色,theTableView是視圖,而這裏的_infoArray是數據源,實際上這裏的_infoArray並非完整的數據模型,還能夠進行更高層次的抽象。
(6)上面咱們服從了UITalbeViewDelegate和UITableViewDataSource協議,那麼咱們就須要在xxxViewController中區實現協議中的代理方法,那麼有讀者會問,UITableView有那麼多的代理方法,我老是記不清楚,這裏我將告訴你怎麼記得清楚,之後也不會遺忘。
在全部的UITableView代理方法中,返回列表行數(NSInteger)和設置列表內容(UITableViewCell *)是必不可少的兩個代理方法,這兩個方法的返回值分別是NSInteger和UITableViewCell *內容,因此咱們只須要記住返回值,而後Xcode就會自動提示咱們須要選擇哪一個方法,
例如我想實現返回列表行數的方法,這時候只須要輸入- (NSInteger)tableView,這時候Xcode會提示咱們不少的方法,以下圖所示,
這時候我選擇第二個numberOfRowsInSection:(NSInteger)section方法,而後在裏面返回_infoArray的數組個數,以下代碼所示,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [_infoArray count]; }
這樣就設置了返回的行數。
接下來我要設置列表顯示的內容,咱們知道它的返回值爲UITableViewCell *類型,因此我直接這樣寫,- (UITableViewCell *)tableView,Xcode自動提示我完整的代理方法,以下圖所示,
很幸運,返回UITableViewCell *內容的方法只有一個,我不用選擇直接按Enter按鍵就能夠了,接着我來實現cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,填充裏面的內容,以下代碼,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleIdentify = @"SimpleIdentify"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleIdentify]; if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify]; } cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row]; return cell; }
上面的代碼全都是我手寫輸入的,由於我已經記得倒背如流了,算是孰能生巧吧,因此iOS開發,對於一些關鍵代碼,爲了避免重複查閱資料,仍是要用心記下來的。那麼怎樣記憶上面簡單可是又容易遺忘的代碼呢?我來講說個人記憶過程吧,首先static NSString *simpleIdentify = @"SimpleIdentify";是設置UITableViewCell的重用標識符,咱們知道UITableView的重用機制比較牛逼的技術,這個之後我會寫博客來講明的,這裏再也不多說。接下來我輸入代碼UITableViewCell *cell = [tableView de];這時候Xcode會自動提示方法列表,以下圖,
記住,這裏請選擇第一個dequeueReusableCellWithIdentifier方法,該方法只有一個NSString *參數,我以前不少次選擇了第二個方法,而後程序莫名其妙地cursh了。
接着經過if(cell == nil){}來判斷cell是否爲空,若是cell爲空,則實例化cell對象,代碼是cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleIdentify];
而後經過cell.textLabel.text = [_infoArray objectAtIndex:indexPath.row];來設置cell顯示的數據源中對應函數的內容,最後經過return cell;返回cell內容。
寫完這些代碼,咱們運行程序,效果圖以下,
好了,這就是UITableView的系列一教程,主要是說明經過xib編碼,有哪些關鍵的步驟;還有幾十怎樣快速記住UITableView的代理方法。
下面一篇博客,我介紹使用reloadData來刷新界面。