我在情节提要中有一个 tableviewcell 设置为 Custom 的 tableview。我在每个单元格的更右侧有 1 个按钮(单元格中的按钮)。
加载每个单元格时,根据条件,此按钮应该显示或隐藏。但它没有按预期工作。当我向下滚动并再次向上滚动时,以前隐藏(条件正确)的按钮现在正在显示。
我对单元格中的图像执行相同的操作,即使在滚动时也可以正确加载图像。
这是我的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIButton *btnCall = (UIButton *) [cell viewWithTag:5];
UIImageView *imgIcon = (UIImageView *) [cell viewWithTag:6];
[btnCall setHidden:TRUE];
if (... some condition ...) {
[btnCall setHidden:false];
[imgIcon setImage:[UIImage imageNamed:@"icon1.png"]]; // load correctly
} else {
[btnCall setHidden:true]; // doesn't seem to work consistently.
[imgIcon setImage:[UIImage imageNamed:@"icon2.png"]]; // load correctly
}
return cell;
}
在我的故事板中,原型单元格中的这个按钮也设置为隐藏。
我已经阅读了很多关于这个问题的问题和答案。
- 一个是UITableViewCell 中的 UIButton 子视图没有按预期隐藏。但我的已经是一个自定义单元格(在情节提要中设置)。
- 另一个:iPhone TableViewCell - 添加和删除带有条件的按钮。但这需要在我不使用的“if (cell == nil)”块中创建按钮。因为如果我使用,我的所有其他东西(标签、通过情节提要添加到自定义单元格的图像)都不会显示。而且我真的想使用情节提要,而不是通过“if(cell == nil)”块以编程方式添加项目。
- 和其他人......但到目前为止都没有工作。
我还有其他的东西,比如每个单元格中的图像。并且图像加载正确,即使向上/向下滚动也是如此。
有人可以帮忙吗?非常感谢!
****编辑1——问题解决了!!!****
我将我的单元格子类化,以便我的重置可以更合适。这是它的完成方式(我用图像替换了上面的按钮 - 将其保留为按钮也应该可以正常工作):
@implementation PSCellMyTableViewCell
@synthesize imgView1 = _imgView1, imgView2 = _imgView2;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
self.imgView1.image = nil;
self.imgView2.image = nil;
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
cellForRowAtIndexPath 的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell1";
PSCellMyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (... some condition ...) {
[cell.imgView1 setImage:[UIImage imageNamed:@"icon-1.png"]];// no longer using tag
[cell.imgView2 setImage:[UIImage imageNamed:@"icon-12.png"]]; // no longer using tag
} else {
[cell.imgView1 setImage:[UIImage imageNamed:@"icon-2.png"]];// no tag
[cell.imgView2 setImage:[UIImage imageNamed:@"icon-22.png"]]; // no tag
}
return cell;
}