因为 cell会复用,所以使用cell的时候会检查一下cell的状态,比如
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cartCell" forIndexPath:indexPath];
if(cell == nil){
//do something
UIImageView *imageView = alloct init
imageView.tag = tag;
[cell.contentView addSubview:imageView]
}
else{
UIImageView *imageView = cell from tag get view
}
但是我的情况是,cell一开始就不为空,于是我这么做:
if ([cell.contentView subviews].count == 0) {
// do some thing
}
最后我发现,一个table有5个cell全部都在显示区域里面,只有第一个cell是新的,其他都是复用的,这样是不是不对?
讲道理不应该是屏幕内的cell都是独立的,当屏幕外的cell滑动进来才会导致复用么?
同意 酷酷的哀殿,補充一下:
這個方法會預設回傳一個非空的cell,如果沒有能直接重複使用的cell,會幫你創建一個cell,所以一般的做法是:
1.建立一個UITableViewCell的子類別ACell;
2.ACell重寫方法:
這個方法在dequeue找不到可重複使用的cell需要建立新的cell的時候會呼叫;
3.在tableView註冊這個類別(registerNib也可以):
4.在cellForRowAtIndexPath的時候直接呼叫就好:
建議你透過繼承 UITableViewCell 的方式來重複使用程式碼。並在
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
中初始化子視圖。if ([cell.contentView subviews].count == 0) {
}這個判斷永遠不成立吧,cell自帶一些子視圖
雷雷
}