你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS的tableView的知識

IOS的tableView的知識

編輯:IOS開發綜合
  • Introduction

  • Published using GitBook  

    tableView性能優化 - cell的循環利用方式1

    tableView性能優化 - cell的循環利用方式1

    /**
     *  什麼時候調用:每當有一個cell進入視野范圍內就會調用
     */
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 0.重用標識
        // 被static修飾的局部變量:只會初始化一次,在整個程序運行過程中,只有一份內存
        static NSString *ID = @"cell";
    
        // 1.先根據cell的標識去緩存池中查找可循環利用的cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 2.如果cell為nil(緩存池找不到對應的cell)
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        }
    
        // 3.覆蓋數據
        cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
    
        return cell;
    }
    

    tableView性能優化 - cell的循環利用方式2

    定義一個全局變量
    // 定義重用標識
    NSString *ID = @"cell";
    
    注冊某個標識對應的cell類型
    // 在這個方法中注冊cell
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 注冊某個標識對應的cell類型
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
    }
    
    在數據源方法中返回cell
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 1.去緩存池中查找cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 2.覆蓋數據
        cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
    
        return cell;
    }
    

    tableView性能優化 - cell的循環利用方式3

    在storyboard中設置UITableView的Dynamic Prototypes Cell\

    設置cell的重用標識\

    在代碼中利用重用標識獲取cell

    // 0.重用標識
    // 被static修飾的局部變量:只會初始化一次,在整個程序運行過程中,只有一份內存
    static NSString *ID = @"cell";
    
    // 1.先根據cell的標識去緩存池中查找可循環利用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 2.覆蓋數據
    cell.textLabel.text = [NSString stringWithFormat:@"cell - %zd", indexPath.row];
    
    return cell;
    

    錯誤將UIViewController當做UITableViewController來用

    \

    UITableView的常見設置

    // 分割線顏色
    self.tableView.separatorColor = [UIColor redColor];
    
    // 隱藏分割線
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    // tableView有數據的時候才需要分割線
    // 開發小技巧:快速取消分割線
     self.tableView.tableFooterView = [[UIView alloc] init];
    

    UITableViewCell的常見設置

    // 取消選中的樣式(常用) 讓當前 cell 按下無反應
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    // 設置選中的背景色
    UIView *selectedBackgroundView = [[UIView alloc] init];
    selectedBackgroundView.backgroundColor = [UIColor redColor];
    cell.selectedBackgroundView = selectedBackgroundView;
    
    // 設置默認的背景色
    cell.backgroundColor = [UIColor blueColor];
    
    // 設置默認的背景色
    UIView *backgroundView = [[UIView alloc] init];
    backgroundView.backgroundColor = [UIColor greenColor];
    cell.backgroundView = backgroundView;
    
    // backgroundView的優先級 > backgroundColor
    // 設置指示器
    //    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.accessoryView = [[UISwitch alloc] init];
    

    自定義cell

    等高的cell

    storyboard自定義cell

    1.創建一個繼承自UITableViewCell的子類,比如XMGDealCell
    \2.在storyboard中 往cell裡面增加需要用到的子控件
    \設置cell的重用標識
    \設置cell的class為XMGDealCell
    \ 3.在控制器中 利用重用標識找到cell給cell傳遞模型數據
    \ 4.在XMGDealCell中 將storyboard中的子控件連線到類擴展中
    \需要提供一個模型屬性,重寫模型的set方法,在這個方法中設置模型數據到子控件上
    \\

    xib自定義cell

    1.創建一個繼承自UITableViewCell的子類,比如XMGDealCell
    2.創建一個xib文件(文件名建議跟cell的類名一樣),比如XMGDealCell.xib 拖拽一個UITableViewCell出來修改cell的class為XMGDealCell設置cell的重用標識往cell中添加需要用到的子控件 3.在控制器中 利用registerNib...方法注冊xib文件利用重用標識找到cell(如果沒有注冊xib文件,就需要手動去加載xib文件)給cell傳遞模型數據
    4.在XMGDealCell中 將xib中的子控件連線到類擴展中需要提供一個模型屬性,重寫模型的set方法,在這個方法中設置模型數據到子控件上也可以將創建獲得cell的代碼封裝起來(比如cellWithTableView:方法)

    代碼自定義cell(使用frame)

    1.創建一個繼承自UITableViewCell的子類,比如XMGDealCell 在initWithStyle:reuseIdentifier:方法中 添加子控件設置子控件的初始化屬性(比如文字顏色、字體) 在layoutSubviews方法中設置子控件的frame需要提供一個模型屬性,重寫模型的set方法,在這個方法中設置模型數據到子控件 2.在控制器中 利用registerClass...方法注冊XMGDealCell類利用重用標識找到cell(如果沒有注冊類,就需要手動創建cell)給cell傳遞模型數據也可以將創建獲得cell的代碼封裝起來(比如cellWithTableView:方法)

    代碼自定義cell(使用autolayout)

    1.創建一個繼承自UITableViewCell的子類,比如XMGDealCell 在initWithStyle:reuseIdentifier:方法中 添加子控件添加子控件的約束(建議使用Masonry)設置子控件的初始化屬性(比如文字顏色、字體) 需要提供一個模型屬性,重寫模型的set方法,在這個方法中設置模型數據到子控件 2.在控制器中 利用registerClass...方法注冊XMGDealCell類利用重用標識找到cell(如果沒有注冊類,就需要手動創建cell)給cell傳遞模型數據也可以將創建獲得cell的代碼封裝起來(比如cellWithTableView:方法)

    非等高的cell

    xib自定義cell

    storyboard自定義cell

    代碼自定義cell(frame)代碼自定義cell(Autolayout)
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved