ios - iphone UITableViewCell 重复的问题?
高洛峰
高洛峰 2017-04-18 09:16:22
0
4
412

因为 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滑动进来才会导致复用么?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(4)
伊谢尔伦

同意 酷酷的哀殿,補充一下:

- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);

這個方法會預設回傳一個非空的cell,如果沒有能直接重複使用的cell,會幫你創建一個cell,所以一般的做法是:

1.建立一個UITableViewCell的子類別ACell;

2.ACell重寫方法:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        // configure cell
    }
}

這個方法在dequeue找不到可重複使用的cell需要建立新的cell的時候會呼叫;

3.在tableView註冊這個類別(registerNib也可以):

[tableView registerClass:[ACell class] forCellReuseIdentifier:identifier]

4.在cellForRowAtIndexPath的時候直接呼叫就好:

ACell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
[cell setModel:model];
刘奇

建議你透過繼承 UITableViewCell 的方式來重複使用程式碼。並在- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier中初始化子視圖。

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.selectionStyle = UITableViewCellSelectionStyleNone;

  
阿神

if ([cell.contentView subviews].count == 0) {

 // do some thing

}這個判斷永遠不成立吧,cell自帶一些子視圖

洪涛

雷雷

}

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