iOS深入學習(UITableView:系列1-最基本的東西)

來源:互聯網
上載者:User

標籤:

這是UITableView部落格系列的第一篇,使用xib和arc編碼,主要講解一些UITableView使用過程中簡單的、但是又容易被忽略的東西,而且我會告訴讀者,怎樣在使用了之後就再也不會忘記。

操作的步驟如下,

(1)首先拖一個UITableView控制項到xib檔案上面,如,

這沒有什麼,大家不要太過於害怕UITableView,它只是一個UI控制項,跟UIButton和UILabel沒什麼不一樣,可以隨意的拖拉。

(2)接下來我們在對應的xxxViewController中執行個體化這個UITableView對象,這裡有一個小技巧需要說明一下,先點擊xxxViewController.xib檔案,這時候Xcode中顯示的就是xib檔案的內容,這時候雙擊xxxViewController.h檔案,這時候在小視窗中開啟了.h檔案,這樣就方便了下面的操作。

在xxxViewController.xib檔案中點,擊TableView,點擊滑鼠右鍵,將其拖動到小視窗的xxxViewController.h檔案中,如,

(3)釋放滑鼠,這時候會彈出下面的介面,

這裡我將UITableView對象命名為theTableView,你可以將其命名為任意的名字,這隻是一個變數名稱,任意你修改。點擊Connect按鈕,這樣Xcode自動幫我們在xxxViewController.h檔案中產生了property聲明,

?
1 @property (nonatomic, strong) IBOutlet UITableView *theTableView;

 

這就是使用xib的好處,節省了很多代碼,不是嗎?

(4)這一步驟很重要,設定theTableView的delegate和dataSource為self,在xxxViewController.xib檔案中,右鍵拖動滑鼠指向File‘s Owner,如,

接著會彈出下面的介面,

先點擊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,

?
12345 @interface xxxViewController()<UITableViewDelegate,UITableViewDataSource>{    NSMutableArray *_infoArray;}@end

 

在-viewDidLoad中初始化_infoArray數組內容,

?
12345 - (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的數組個數,如下代碼所示,

?
1234 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return [_infoArray count];}

 

這樣就設定了返回的行數。

接下來我要設定列表顯示的內容,我們知道它的傳回值為UITableViewCell *類型,所以我直接這樣寫,- (UITableViewCell *)tableView,Xcode自動提示我完整的代理方法,如所示,

很幸運,返回UITableViewCell *內容的方法只有一個,我不用選擇直接按Enter按鍵就可以了,接著我來實現cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,填充裡面的內容,如下代碼,

?
1234567891011 - (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的代理方法。

iOS深入學習(UITableView:系列1-最基本的東西)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.