objective-c - iOS 自定义tableView cell重用导致内容重复 问题 如何有效解决?急急急!!
大家讲道理
大家讲道理 2017-04-18 09:57:24
0
7
495

 [self.tableView registerNib:[UINib nibWithNibName:@"NewTaskCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:NewTaskCellId];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NewTaskCell *cell = [self.tableView dequeueReusableCellWithIdentifier:NewTaskCellId forIndexPath:indexPath];
    if (!cell) {
        cell = [[NewTaskCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NewTaskCellId];
    }
    if (self.taskList.count > indexPath.row) {
        FindDisOrderInfoEntity *entity = [self.taskList objectAtIndex:indexPath.row];
        [cell setCellContentWith:entity];
    }
    return cell;
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(7)
迷茫

去掉 if (self.taskList.count > indexPath.row)
cell 正常賦值
當單元格增加時 刷表 或 刷新增這一行

巴扎黑

應該先看看你的cell的個數,其次cell的理念是容器,重用只是重用容器,決定權在資料來源

阿神

你都已經用registerNib方法註冊了.在代理方法就不需要判斷cell是否為空

小葫芦

在(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath代理方法中這樣寫:

NewTaskCell *cell = [self.tableView dequeueReusableCellWithIdentifier:NewTaskCellId forIndexPath:indexPath];
FindDisOrderInfoEntity *entity = [self.taskList objectAtIndex:indexPath.row];       [cell setCellContentWith:entity];
return cell;
Ty80

cell重用呢,重用的是之前的狀態,例如cell上的UIButtonUILabel 如果在重用之前UIButton是高亮状态 UILabel上的text=@"label"那么重用之后,UIButton还是高亮状态,UILabeltext还是labelcell重用的时候会调用cellForRow方法。所以一般会在cellForRow里面重新赋值和改变状态。所以在cell里面有个默认的规则 就是如果有if 那一定要有else不然的話cell會變的亂。

Ty80

註冊後可以不判斷cell是不是空,但是判斷了也沒毛病,你的count為什麼要判斷沒看懂,可能你這數組不是資料來源?但是應該也不是你的問題所在,如果你"內容重複"的意思是cell上控件重複加進去了,那應該是[cell setCellContentWith:entity]; 這個裡面的方法可能出問題了,有可能是你在這裡建立控制項並加入,複用只刷新資料就可以了,也就是只有賦值過程沒有建立控制項

迷茫

tableview 顯示不多 的話你不讓他重用 就不會重複了 還有調用registerNib 方法後 內存中就會一直純在CELL了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板