iOS學習筆記之UITableViewController&UITableView

來源:互聯網
上載者:User

標籤:

iOS學習筆記之UITableViewController&UITableView寫在前面

上個月末到現在一直都在忙實驗室的事情,與導師討論之後,發現目前在實驗室完成的工作還不足以寫成畢業論文,因此需要繼續思考新的演算法。這是一件挺痛苦的事情,特別是在很難找到與自己研究方向相關的文獻的時候。也許網格序列浮水印這個課題本身的研究意義就是有待考證的。儘管如此,還是要努力的思考下去。由於實驗室的原因,iOS的學習進度明顯受到影響,加之整理文檔本身是一件耗費時間和精力的事情,因此才這麼久沒有寫筆記了。

MVC簡介

在介紹UITableView之前,簡單的介紹一下MVC(Model-View-Controller)模式,它是iOS開發所遵循的一種設計模式。其含義是,應用建立的任何一個對象,其類型必定是以下三種類型中的一種

  • 模型:負責儲存資料,與使用者介面無關

  • 視圖:負責顯示介面,與模型對象無關

  • 控制器:負責確保視圖對象和模型對象的資料保持一致

UITableView簡介

UITableView是視圖,因此UITableView不負責處理應用的邏輯或資料,在實際使用UITableView時,要考慮下列問題:

  • 通常情況下,要通過某個視圖控制對象來建立和釋放UITableView對象,並負責顯示或隱藏視圖

  • UITableView對象要有資料來源才能正常工作。UITableView對象會向資料來源查詢要顯示的函數、顯示表格行所需的資料和其他所需資料。凡是遵守UITableViewDataSource協議的OC對象,都可以稱為UITableView對象的資料來源。

  • 通常情況下,要為UITableView對象設定委派物件,以便能在該對象發生特定事件時做出相應的處理。凡是遵守UITableViewDelegate協議的對象,都可以稱為UITableView對象的委派物件。

UITableViewController簡介

UITableViewController對象可以扮演上述UITableView所需要的全部角色,包括視圖控制對象、資料來源和委派物件。
UITableViewController是UIViewController的子類,因此有自己的view屬性。UITableViewController對象的view屬性指向一個UITableView對象,並且這個UITableView對象由UITableViewController對象負責設定和顯示。UITableVIewController對象會在建立UITableView對象後,為這個UITableView對象的dataSource和delegate賦值,並指向自己,如所示:
![enter description here][1]

UITableView資料來源

UITableView對象會自己查詢另一個對象以獲得要顯示的內容,這個對象就是UITableVIew對象的資料來源,也就是dataSource屬性所指向的對象。
當某個UITableView對象要擷取顯示的資料時,會向其資料來源發送一組特定的訊息,這些訊息都是在UITableViewDataSource協議中聲明的。tableView:numberOfRowsInSecton:tableView:cellForRowAtIndexPath:是協議中必須實現的兩個方法。UITableView對象可以通過資料來源對象的這兩個方法獲得應該顯示的行數及顯示各行所需的視圖。

  • tableView:numberOfRowsInSection:
    方法原型

-(NSInteger)tableView:(UITableView *)tableView  numberOfRowsInSection:(NSIngeger)section

該方法是UITableViewDataSource中的必須方法,該方法會返回一個整型值(NSInteger),代表UITableView對象顯示的函數。
UITableView對象可以分段顯示資料,每個表格段(section)包含一組獨立的行。傳入tableView:numberOfRowsInSecton:方法中的section就是用於指定某個表格段。
- tableView:cellForRowAtIndexPath:
方法原型:

-(UITableViewCell *)tableView:(UITableView *)tableView        cellForRowAtIndexPath:(NSIndexPath *)indexPath

在介紹該方法前,需要先介紹另一個類:UITableViewCell

UITableViewCell簡介

表視圖顯示的每一行都是一個獨立的視圖,這些視圖是UITableViewCell對象。UITableViewCell對象有一個子視圖:contentView。contentView也包含很多子視圖,它的子視圖構成UITableViewCell對象的主要外觀。負責顯示UITableViewCell對象所代表的資料,是contentView所包含的三個子視圖。其中兩個視圖是UILabel對象,分別為textLable屬性和detailTextLabel屬性所指向的對象。第三個是UIImageView對象,即imageView屬性所指向的對象。
在建立UITableViewCell對象時,需要設定一種風格(UITableViewCellStyle),風格決定UITableViewCell對象會顯示上述子視圖中的哪幾個,以及這些視圖在contentView中的位置。列出了所有的風格常量和外觀樣本。
![enter description here][2]

下面假定我們在表格中要顯示一些列的A對象。我們需要通過UITableViewCell對象的textLabel屬性顯示某個對象A的描述資訊。這時需要實現UITableViewDataSource協議的第二個必須方法——tableView:cellForRowAtIndexPath:
tableView:cellForRowAtIndexPath:需要完成的任務如下:建立一個UITableViewCell對象,擷取UITableViewCell對象所代表的A對象,向A對象發送description訊息,將得到的描述資訊賦給UITableViewCell對象的textLabel屬性,最後返回UITableViewCell對象。
傳入tableView:cellForRowAtIndexPath:的第二個參數是一個NSIndexPath對象,該對象包含兩個屬性section(段)和row(行)。當UITableView對象向其資料來源發送tableView:cellForRowAtIndexPath:訊息時,其目的是擷取用於顯示第section個表格段、第row行資料的UITableViewCell對象。

重用UITableViewCell對象

iOS裝置記憶體有限,因此若某個UITableView對象要顯示大量的記錄,並且要針對每條記錄建立相應的UITableViewCell對象,就會很快耗盡iOS裝置的記憶體。
為瞭解決該問題,需要重用UITabelViewCell對象。當使用者滾動UITbelView對象時,部分UITableViewCell對象會移出視窗。UITableView對象會將移出視窗的UITableViewCell對象放入UITableViewCell對象池,等待重用。當UITableView對象要求資料來源返回某個UITableVIewCell對象時,資料來源可以先查看對象池。如果有未使用的UITabelViewCell對象,就可以用新的資料配置這個UITableViewCell對象,然後將其返回給UITableView對象,從而避免建立新對象。

總結

在使用UITableView時,要牢記UITableView是視圖,只負責顯示,而不進行資料和邏輯處理。如果要讓UITableView分多個表格段顯示,或進行其他複雜的顯示,應該將判斷邏輯放在“模型”部分,然後通過“控制器”將判斷後的結果傳入到UITableView中。
[1]: ./images/1464090777571.jpg "1464090777571.jpg"
[2]: ./images/1464093634179.jpg "1464093634179.jpg"

iOS學習筆記之UITableViewController&UITableView

聯繫我們

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