[iOS] dequeueReusableCellWithIdentifier Method

今天要學習一下Table View Cell的一個方法:
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier

各位可以先參考Apple的文件說明。

這方法主要是回傳一個可重複使用的table-view cell物件,用它的識別(identifier)定位。

當我們使用方法tableView:cellForRowAtIndexPath:去指派cell到row裡面去時,為了運行效能的理由,table view的資料來源應該要重複使用UITableViewCell物件。這句話的意思是,系統在初始化後會有一大堆cell放滿畫面,當我們往下捲動時,上面的cell就會被隱藏,這些cell物件等一下就要拿來重複使用。

當你因為捲動而要看那些被隱藏的cell時,系統需要你提供一個cell給table view讓使用者去看,就會由資料來源去呼叫這個方法。這方法會在被隱藏的那些cell序列中尋找,如果有可用的cell,那這個方法會dequeue一個存在的cell,拿出來打扮一番給使用者看,但如果沒有可用的cell,比方說剛啓動應用程式,才第一次進行初始化時,系統一個一個cell去建立,所以還沒有隱藏起來的cell,這時就會需要你去製作新的cell。新的cell可由class或是先前註冊的nib file來製作。

但如果沒有可用的cell,亦即,序列中沒有隱藏起來沒用到的cell,而且又沒有註冊class或是nib file,這個方法就會回傳nil。

若你用一個指定的識別來註冊一個class,並且創造了一個新的cell,這個方法會呼叫initWithStyle:reuseIdentifier:方法來初始化cell。若是nib-based cell,這個方法會由提供的nib檔去載入cel。如果有一個存在的cell可供重複使用,此方法就會改用prepareForReuse方法來初始化cell。

用法大概如下:

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
   
    //Something......

    static NSString *identifier = @"TableIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier];
   
    //若cell為nil,就做一個cell
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SectionsTableIdentifier];
    }
   
    //cell的label設定
    cell.textLabel.text = [nameSection objectAtIndex:row];
    return cell;
}



最後的label設定,是基本的cell需要重新設定的部分,假設你的cell還有子標題之類的東西,那你也要重新在這邊設定。



我也是初學,有誤請指教。

留言