Rumah > Soal Jawab > teks badan
因为 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滑动进来才会导致复用么?
伊谢尔伦2017-04-18 09:18:22
Setuju, Cool Ai Dian, ingin menambah:
- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
Kaedah ini akan mengembalikan sel yang tidak kosong secara lalai Jika tiada sel yang boleh digunakan semula secara langsung, kaedah ini akan membantu anda mencipta sel, jadi pendekatan umum ialah:
1. Buat subkelas ACell UITableViewCell
2.Kaedah penulisan semula ACell:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// configure cell
}
}
Kaedah ini akan dipanggil apabila dequeue tidak dapat mencari sel yang boleh digunakan semula dan perlu mencipta sel baharu;
3. Daftar kelas ini dalam tableView (registerNib juga boleh digunakan):
[tableView registerClass:[ACell class] forCellReuseIdentifier:identifier]
4. Panggil sahaja terus apabila cellForRowAtIndexPath:
ACell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
[cell setModel:model];
怪我咯2017-04-18 09:18:22
Adalah disyorkan agar anda menggunakan semula kod dengan mewarisi UITableViewCell. Dan mulakan subview dalam - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
.
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
阿神2017-04-18 09:18:22
jika ([cell.contentView subviews].kira == 0) {
// do some thing
} Penghakiman ini tidak akan pernah benar, sel itu disertakan dengan beberapa subview
PHP中文网2017-04-18 09:18:22
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cartCell"];
}
UIImageView *imageView = [[UIImageView alloc] init];
imageView.tag = tag;
[cell.contentView addSubview:imageView]
}