有人可以告诉我如何使用prepareForReuse吗?我一直在寻找几个小时并阅读开发文档。
在我的自定义单元格中,它扩展了UITableViewCell,我有prepareForReuse方法及其调用,但我该如何处理它(有渲染问题)。我这样做吗? 每个标签的截止日期= @“”
@implementation PostTableCustomCellController
@synthesize authorName;
@synthesize deadline;
@synthesize distance;
@synthesize interestedCount;
@synthesize description;
@synthesize avatar;
@synthesize viewForBackground;
@synthesize fetchedResultsController, managedObjectContext;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void) prepareForReuse {
NSLog(@"prep for reuse");
[self clearFields];
}
- (void) clearFields {
NSLog(@"clearFields was called Jason");
}
- (void)dealloc {
[super dealloc];
}
@end
答案 0 :(得分:9)
一旦构造了一个对象,调用任何init
方法是不可接受的,因此必须有一些方法可以在重用之前将对象重置回中性状态。这就是prepareForReuse
的用途。您可以使用该方法将对象放回到调用init
方法后的状态,以便调用代码执行相同的操作,无论是给定新对象还是重用对象。
答案 1 :(得分:1)
在我的一个应用程序中,我有持久对象实例,每行一个,它们知道'他们的'UITableViewCell实例。 (当行可见时,实际上有一行)。
在这种情况下,prepareForReuse
只是告诉行对象其UITableViewCell实例即将被释放给其他行对象的机会,即原始行不再在表中有可见的存在图。
答案 2 :(得分:-1)
(一个迟到的答案 - 但对于那些偶然发现这个问题的人来说)
如果您不想继承UITableViewCell并覆盖-(void)prepareForReuse
方法,可以考虑使用<UITableViewDelegate>
方法:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
// prepare cell before it is displayed
}
这将允许您在显示之前prepare
单元格。