iOS開發之UITableView詳解_IOS

來源:互聯網
上載者:User

一、UITableView基本介紹

預設的UITableView有2種風格:

  1. UITableViewStylePlain(不分組)
  2. UITableViewStyleGrouped(分組)

UITableView中的資料只有行的概念,沒有列的概念,UITableView的每行資料就是一個UITableViewCell。
內建的UITableViewCell的類型選擇有:

複製代碼 代碼如下:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,    // 左側顯示textLabel(不顯示detailTextLabel),imageView可選(顯示在最左邊)
    UITableViewCellStyleValue1,     // 左側顯示textLabel、右側顯示detailTextLabel(預設藍色),imageView可選(顯示在最左邊)
    UITableViewCellStyleValue2,     // 左側依次顯示textLabel(預設藍色)和detailTextLabel,imageView可選(顯示在最左邊)
    UITableViewCellStyleSubtitle    // 左上方顯示textLabel,左下方顯示detailTextLabel(預設灰色),imageView可選(顯示在最左邊)
};

二、UITableViewDataSource資料來源

資料來源的作用就是告訴UITableView,我該顯示什麼資料

複製代碼 代碼如下:

#pragma mark 常用資料來源方法
#pragma mark 返回分組數
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#pragma mark 返回每組行數
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
#pragma mark 返回每行的儲存格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 返回每組頭標題名稱
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
#pragma mark 返回每組尾部說明
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

計算分組數 -> 計算每組行數 -> 產生分組索引 -> 產生儲存格
注意:cellForRowAtIndexPath只生產當前顯示在介面上的儲存格

三、UITableViewDelegate代理

代理的作用是告訴UITableView,我該怎麼顯示和響應

複製代碼 代碼如下:

#pragma mark - 常用代理方法
#pragma mark 設定分組頭部的內容高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
#pragma mark 設定每行高度(每行高度可以不一樣)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 設定分組尾部的內容高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
#pragma mark 點擊了某一行
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 設定分組的頭部視圖
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
#pragma mark 設定分組的尾部視圖
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;

四、UITableView重新整理列表方法

複製代碼 代碼如下:

#pragma mark 重新整理整個表格
- (void)reloadData;
#pragma mark 重新整理指定的行
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 重新整理指定的分組
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 刪除時重新整理指定的行資料
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
#pragma mark 添加時重新整理指定的行資料
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;

五、UITableViewCell的重用機制

在UITableView內部有一個緩衝池,專門用來緩衝UITableViewCell,因為UITableView不是一下子顯示全部Cell,而是以 所見即所得 (WYSIWYG) 的方式,手機上看的見的Cell,才有存在的對象UITableViewCell執行個體。具體表現如下:

每次顯示新的Cell的時候,都是先從緩衝池中取出對應的UITableViewCell對象,進行 重新初始化 顯示。如果緩衝池中沒有,才建立新的UITableViewCell對象
每當某個Cell被移出 可見地區 外後,就會被 回收 到緩衝池中
所以儘管要展示的資料巨大,但記憶體中存在的UITableViewCell也是有限的,極大的降低了對記憶體的需求。

複製代碼 代碼如下:

# pragma mark 在tableView:cellForRowAtIndexPath:方法中使用UITableView的重用機制
// 由於此方法調用十分頻繁,cell的標示聲明成靜態變數有利於效能最佳化
static NSString *cellIdentifier = @"UITableViewCellIdentifierKey1";
// 首先根據標識去緩衝池取
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// 如果緩衝池沒有找到,則重新建立並放到緩衝池中
if(!cell){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
}

六、系統內建的UITableViewCell

我們基本上很少使用系統內建的UITableViewCell,樣式太過於死板了。

七、自訂Cell

基本步驟:
自訂類XXXTableViewCell,繼承UITableViewCell
重寫-(id)initWithStyle:reuseIdentifier:方法,添加子控制項
最好重寫layoutSubView方法,設定子控制項frame
然後在UITableView的代理方法tableView:cellForRowAtIndexPath:中使用重用機制建立該類XXXTableViewCell,再對cell進行初始化

八、MVC模式

 

相關文章

聯繫我們

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