찾다

 >  Q&A  >  본문

ios - iphone UITableViewCell 重复的问题?

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

高洛峰高洛峰2889일 전421

모든 응답(4)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:18:22

    동의합니다. Cool Ai Dian이 다음을 추가하고 싶습니다.

    으아악

    이 방법은 기본적으로 비어 있지 않은 셀을 반환합니다. 직접 재사용할 수 있는 셀이 없는 경우 셀을 만드는 데 도움이 되므로 일반적인 접근 방식은 다음과 같습니다.

    1. UITableViewCell의 하위 클래스 ACell을 생성합니다.

    2.ACell 재작성 방법:

    으아악

    이 메소드는 대기열에서 재사용 가능한 셀을 찾을 수 없어 새 셀을 생성해야 할 때 호출됩니다.

    3. 이 클래스를 tableView에 등록합니다(registerNib도 사용할 수 있음):

    으아악

    4. cellForRowAtIndexPath:

    일 때 직접 호출하세요. 으아악

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:18:22

    UITableViewCell을 상속하여 코드를 재사용하는 것이 좋습니다. 그리고 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier에서 하위 뷰를 초기화합니다.

    으아악

    회신하다
    0
  • 阿神

    阿神2017-04-18 09:18:22

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

    으아악

    } 이 판단은 결코 사실이 아닐 것입니다. 셀에는 일부 하위 뷰가 포함되어 있습니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:18:22

    으아악

    }

    회신하다
    0
  • 취소회신하다