Ios UITableViewCell更新多个图像alpha
我创建了一个简单的UITableViewController。我为所有单元格添加了cell.imageView.image,但对某些单元格使用alpha隐藏图像。当我向下滚动时,其他单元格开始隐藏图像。我试图通过只关注一个细胞来解决这个问题,但同样的问题仍然存在,随机细胞开始隐藏图像。任何帮助都将不胜感激Ios UITableViewCell更新多个图像alpha,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我创建了一个简单的UITableViewController。我为所有单元格添加了cell.imageView.image,但对某些单元格使用alpha隐藏图像。当我向下滚动时,其他单元格开始隐藏图像。我试图通过只关注一个细胞来解决这个问题,但同样的问题仍然存在,随机细胞开始隐藏图像。任何帮助都将不胜感激 - (void)viewDidLoad { [super viewDidLoad]; } - (NSInteger)numberOfSectionsInTableView:(UITa
- (void)viewDidLoad {
[super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.imageView.image = [UIImage imageNamed:@"down-arrow.png"];
cell.textLabel.text = [NSString stringWithFormat:@"%lu", indexPath.row];
if (indexPath.row == 2) {
cell.imageView.alpha = 0;
}
return cell;
}
您是否尝试将代码更改为:
if (indexPath.row == 2) {
cell.imageView.alpha = 0;
} else {
cell.imageView.alpha = 1;
}
这里的问题是这些单元格被重用,如果在第2行显示一个单元格,那么该单元格将移出屏幕,并在路径10的某个单元格中被重用,该单元格的alpha值仍将设置为0
因此,您必须告诉单元格的alpha值为1,除非它的值为2
您可能想考虑使用属性,而不是将<代码> Alpha < /代码>设置为1和0。< /P> 如果您比较文档中属性的解释,出于各种原因,这可能更正确:
隐藏视图将从其窗口中消失,并且不接收输入事件。但是,它仍保留在superview的子视图列表中,并像往常一样参与自动调整大小。使用子视图隐藏视图的效果是隐藏这些子视图及其可能具有的任何视图子视图。这种效果是隐式的,不会改变接收者后代的隐藏状态 隐藏作为窗口当前第一响应者的视图会导致该视图的下一个有效关键点视图成为新的第一响应者 此属性的值仅反映接收者的状态,而不考虑视图层次结构中接收者祖先的状态。因此,这个属性可以是NO,但是如果祖先被隐藏,那么接收者仍然可能被隐藏 vs 此属性的值是介于0.0到1.0之间的浮点数,其中0.0表示完全透明,1.0表示完全不透明。此值仅影响当前视图,不影响其任何嵌入的子视图 试试这个: if (indexPath.row == 2) {
cell.imageView.hidden = YES;
cell.textLabel.text = @"#2 is HERE";
} else {
cell.imageView.hidden = NO;
cell.textLabel.text = [NSString stringWithFormat:@"%lu", indexPath.row];
}
如果要隐藏某些内容,请使用属性隐藏(布尔值)以上答案是正确的。但这里有另一个建议。您可以更改
imageview的
隐藏属性,而不是设置alpha
,如下所示:
if (indexPath.row == 2) {
cell.imageView.hidden = YES;
} else {
cell.imageView.hidden = NO;
}
if (indexPath.row == 2) {
cell.imageView.hidden = YES;
} else {
cell.imageView.hidden = NO;
}
此外,如果您能制作一个自定义单元格会更好。所有这些答案都是正确的。。只是为了简化
cell.imageView.alpha = !(indexPath.row == 2);
or
cell.imageView.hidden = (indexPath.row == 2);
:)您可以更改imageview的隐藏属性,而不是设置alpha,如:
if (indexPath.row == 2) {
cell.imageView.hidden = YES;
} else {
cell.imageView.hidden = NO;
}
if (indexPath.row == 2) {
cell.imageView.hidden = YES;
} else {
cell.imageView.hidden = NO;
}
或者您可以使用更好的自定义单元格。首先,如果要隐藏某些内容,请使用属性hidden(boolean)而不是alpha。image view.alpha=!(indexath.row==2);您使用了错误的方法,苹果iOS提供了隐藏和显示属性,那么您为什么使用这种类型的设置呢。因为@MasterfegoThis工作得很好。我没有足够的声誉来投票支持这个答案,但谢谢你!