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

因为 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)
伊谢尔伦

同意します、Cool Ai Dian は次のように付け加えます:

リーリー

このメソッドはデフォルトで空ではないセルを返します。直接再利用できるセルがない場合は、セルの作成に役立ちます。そのため、一般的なアプローチは次のとおりです。

1. UITableViewCell のサブクラス ACell を作成します。

2.ACell書き換え方法:

リーリー

このメソッドは、デキューで再利用可能なセルが見つからず、新しいセルを作成する必要がある場合に呼び出されます。

3. このクラスを tableView に登録します (registerNib も使用できます):

リーリー

4. cellForRowAtIndexPath:

の場合に直接呼び出します。 リーリー

いいねを押す +0
刘奇

UITableViewCell を継承してコードを再利用することをお勧めします。そして、- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifierでサブビューを初期化します。

リーリー
いいねを押す +0
阿神

if ([cell.contentView サブビュー].count == 0) {

リーリー

} この判断は決して真実ではありません。セルにはいくつかのサブビューが付属しています

いいねを押す +0
洪涛

リーリー

}

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート