今天要學習一下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還有子標題之類的東西,那你也要重新在這邊設定。
我也是初學,有誤請指教。
- (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還有子標題之類的東西,那你也要重新在這邊設定。
我也是初學,有誤請指教。
留言
張貼留言