IOS UitableView 介紹

來源:互聯網
上載者:User

標籤:

 

在眾多移動應?用中,能看到各式各樣的表格式資料 ,

• 在iOS中,要實現表格式資料展?示,最常?用的做法就是使?用UITableView

• UITableView繼承?自UIScrollView,因此?支援垂直滾動,?而且效能極佳 

 UITableView的兩種樣式,一種是只有一組別,還有一種是有多個數別如:

如何展?示資料 ?

UITableView需要?一個資料來源(dataSource)來顯?示資料,

UITableView會向資料來源查詢?一共有多少?行資料以及每?一?行顯?示什麼資料等 

凡是遵守UITableViewDataSource協議的OC對象,都可以是UITableView的資料來源 

 

tableView展?示資料的過程

1. 調?用資料來源的下?面?方法得知?一共有多少組資料
- (NSInteger)numberOfSectionsInTableView:(UITableView

*)tableView;

2. 調?用資料來源的下?面?方法得知每?一組有多少?行資料
- (NSInteger)tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section;

3. 調?用資料來源的下?面?方法得知每?一?行顯?示什麼內容

- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath;
 當然,我們還要實現協議,不然,這些代理方法也無法使用。property (nonatomic, assign) id <UITableViewDataSource> dataSource; UITableView 

 

通過這3個代理方法,就可以把想要顯示在頁面的資料,綁定到UITableView上。

 

二 Cell簡介 

  • UITableView的每?一?行都是?一個UITableViewCell,通過dataSource的 tableView:cellForRowAtIndexPath:方法來初始化一?行

  • UITableViewCell內部有個預設的?子視圖:contentView,contentView是UITableViewCell所 顯?示內容的?父視圖,可顯?示?一些輔助指?示視圖•

  • 輔助指?示視圖的作?用是顯?示?一個表?示動作的表徵圖,可以通過設定UITableViewCell的 accessoryType來顯?示,

  • 預設是UITableViewCellAccessoryNone(不顯?示輔助指?示視圖), 其他值如下: 

 ● UITableViewCellAccessoryDisclosureIndicator

● UITableViewCellAccessoryDetailDisclosureButton

● UITableViewCellAccessoryCheckmark

• 還可以通過cell的accessoryView屬性來?自訂輔助指?示視圖 

 

UITableViewCell的contentView 

• contentView下預設有3個?子視圖 

其中2個是UILabel(通過UITableViewCell的textLabel和detailTextLabel屬性訪問) 

第3個是UIImageView(通過UITableViewCell的imageView屬性訪問) 

UITableViewCell還有?一個UITableViewCellStyle屬性,?用於決定使?用contentView的 哪些?子視圖,以及這些?子視圖在contentView中的位置 

Cell的重?用原理

• iOS裝置的記憶體有限,如果?用UITableView顯?示成千上萬條資料,就需要成千上萬 個UITableViewCell對象的話,那將會耗盡iOS裝置的記憶體。

要解決該問題,需要重 ?用UITableViewCell對象

• 重?用原理:當滾動列表時,部分UITableViewCell會移出窗??口,UITableView會將窗??口外 的UITableViewCell放?入?一個對象池中,等待重?用。

當UITableView要求dataSource返回 UITableViewCell時,dataSource會先查看這個對象池,

如果池中有未使?用的 UITableViewCell,dataSource會?用新的資料配置這個UITableViewCell,

然後返回給 UITableView,重新顯?示到窗??口中,從?而避免建立新對象 

 

• 還有?一個?非常重要的問題:有時候需要?自訂UITableViewCell(?用?一個?子類繼 承UITableViewCell),

?而且每?一?行?用的不?一定是同?一種UITableViewCell,所以?一 個UITableView可能擁有不同類型的UITableViewCell,

對象池中也會有很多不同類型的 UITableViewCell,那麼UITableView在重?用UITableViewCell時可能會得到錯誤類型的 UITableViewCell

• 解決?方案:UITableViewCell有個NSString *reuseIdentifier屬性,可以在初始

化UITableViewCell的時候傳?入?一個特定的字串標識來設定reuseIdentifier(?一般 ?用UITableViewCell的類名)。

當UITableView要求dataSource返回UITableViewCell時,先 通過?一個字串標識到對象池中尋找對應類型的UITableViewCell對象,

如果有,就重 ?用,如果沒有,就傳?入這個字串標識來初始化?一個UITableViewCell對象 

Cell的重?用代碼- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{?// 1.定義?一個cell的標識static NSString *ID = @"mjcell";// 2.從緩衝池中取出cellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];// 3.如果緩衝池中沒有cell if (cell == nil) {       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:ID];}// 4.設定cell的屬性... return cell;}

 

 

 


 


 

 

IOS 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.