我有一个UITableViewCell
子类。我想添加UIImageView
作为子视图,但请确保正确重用,以便我不会反复添加子视图。我还想确保在prepareForReuse
中删除图像。
这样做的正确方法是什么?
答案 0 :(得分:3)
在自定义单元格子类中,您应该在initWithStyle:reuseIdentifier:
方法中添加任何所需的视图。只要您在表视图中针对重用标识符注册了您的单元格类,那么只要需要新单元格,dequeueReusableCellWithIdentifier:forIndexPath:
就会调用此初始化程序。重复使用单元格时不会调用此方法,因此不会多次添加图像视图。
您可以在单元格类的prepareForReuse
方法中清除图像视图的当前图像。
答案 1 :(得分:0)
在重新使用之前清理单元格的正确方法是
-(void)prepareForReuse;
只需设置self.imageView.image = nil;
要创建UIImageView,我会做类似的事情:
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
[self setup];
return self;
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
[self setup];
return self;
}
- (void)setup {
/// Create your UIImageView and set layout
}
答案 2 :(得分:0)
为了正确重用单元格,在UIViewController类的viewDidLoad中注册单元格xib,然后编写
CustomCell * cell = [tableView dequeueReusableCellWithIdentifier:@" cell_ID"];
然后在imageView inn cell中加载图像。这样可以保证重复使用单元格。
答案 3 :(得分:0)
您需要将UIImageView添加为UITableviewCell子类的属性。这样在cellForRowAtIndexPath中你只需说myCellInstance.profilePicView.image = ...
查看我的回答here,了解我如何将文本字段添加为单元格子视图。请特别注意PersonCell类中initWithStyle:reusableIdentifier:
的覆盖。在故事板中没有使用原型单元,没有使用viewWithTag,就像你想要的那样。
如果Person类有个人资料照片,那么cellForRowAtIndexPath会是什么样子:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
PersonCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier: @"CellWithNameAndSurname"];
if(!cell)
{
cell = [[PersonCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellWithNameAndSurname"];
cell.contentView.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent: 0.08f];
cell.delegate = self;
}
//this should be outside the above if statement!
Person *respectivePerson = _peopleArray[indexPath.row];
cell.profilePicView.image = respectivePerson.profilePic;
cell.nameTextField.text = respectivePerson.name;
cell.surnameTextField.text = respectivePerson.surname;
cell.positionLabel.text = [NSString stringWithFormat:@"%i", (int)indexPath.row];
return cell;
}