iOS-UITableView重用機制 ,圖片重新整理,

來源:互聯網
上載者:User

iOS-UITableView重用機制 ,圖片重新整理,

關於講解UITabel View的使用

參照 連結 http://www.bubuko.com/infodetail-974265.html

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *identifier = @"cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];    if (!cell) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];    }    return cell;}

identifier

可以看到在建立cell的時候伴隨著一個identifier的綁定,這個identifier可以理解為這個cell標識,標識它屬於哪個重用隊列。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

再來看這句代碼,從重用隊列中取出一個cell,注意傳入的參數identifier,如果把重用隊列比作一個房間,那麼identifier就好比這個房間的門牌號,標記著要從指定的房間去找人(也就是cell)。另外,入隊的時候也會根據cell的identifier放到指定的重用隊列中。

可想而知,因為上面那段代碼所有的cell都用了相同的identifier,所以只會在一個重用隊列中進進出出。假如把代碼改成這樣:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    NSString *identifier = [NSString stringWithFormat:@"cell%d",indexPath.row];    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];    if (!cell) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];    }    return cell;}

建立cell的時候對每個cell綁定不同的identifier,那麼每個cell在入隊的時候就會被放到不同的隊列中,這樣第一遍下拉100個cell都是後每次調用dequeueReusableCellWithIdentifier都無法在對對應重用隊列中找到cell,因此要建立100個cell,這就增大了消耗。

註冊cell
[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:identifier];

可以在建立tableView的時候用這個方法註冊cell,註冊之後的作用是每次從重用列表中取cell 的時候,假如不存在,系統就會自動幫我們建立cell,並綁定標識符identifier。可想而知,註冊之後就不需要再寫這段代碼了:

if (!cell) {    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];}
解決列表重複混亂問題
參考文章中,用解決列表重複的3種方法。
我將一下我在開發中實際解決的方案。
我的需求是重用CELL ,但是資料不一樣,每個CELL 的長度也是不一樣的。不過需要的資料類型是一樣的。
重用CELL,
1、清除CELL 的顯示的所有資料,
2、賦值CELL新資料,通過代碼,重新布局cell。並計算出cell 的高度。
3、在UItabeleView的控制頁面,通過字典紀錄cell的高度(keys 是我顯示資料的唯一ID,value是cell的高度)
4、在UItableView的代理方法中,

(- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath,)取出cell的高度進行賦值。

解決列表中重新整理圖片問題

我需求是CELL 中的圖片,之前顯示預設的圖片,當圖片 資料下載成功後,重新整理當前cell的頁面,顯示最新圖片資料,

//自訂放大,圖片現在下載成功,得到通知調用的方法

-(void)reloadSelectButtonInfo 

{

    NSArray *cells = self.myTabelView.visibleCells; //擷取當前顯示的cell

    for (int i = 0; i < [cells count]; i++) {

        MyTableViewCell * cell = cells[i];

        [cell UserIsReferenceWithShareItem];//cell 中顯示圖片的方法

    }

}






相關文章

聯繫我們

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