UITableViewCell更新多个图像alpha

时间:2015-06-27 10:52:06

标签: ios objective-c uitableview

我创建了一个简单的UITableViewController。我为所有单元格添加了一个cell.imageView.image,但我使用alpha隐藏了一些单元格的图像。当我向下滚动时,其他单元格开始隐藏图像。我试图通过只关注一个单元来解决这个问题,但是随机单元开始隐藏图像时仍存在同样的问题。任何帮助将不胜感激。

- (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;
}

5 个答案:

答案 0 :(得分:0)

您是否尝试过将代码更改为:

if (indexPath.row == 2) {
    cell.imageView.alpha = 0;
} else {
    cell.imageView.alpha = 1;
}

这里的问题是单元格被重用,如果你在第2行显示一个单元格,那么该单元格会在屏幕外移动并重新用于路径10的某个单元格,该单元格仍将alpha设置为0。

因此,您必须告诉单元格的alpha为1 ,除非它位于indexPath 2。

您可能需要考虑使用hidden属性,而不是将alpha设置为1和0。

如果您比较文档中属性的解释,那么由于各种原因可能更正确:

  

隐藏视图会从其窗口中消失,并且不会接收输入事件。但它仍保留在超级视图的子视图列表中,并像往常一样参与自动调整。使用子视图隐藏视图会隐藏这些子视图以及它们可能具有的任何视图后代。这种效果是隐含的,不会改变接收者后代的隐藏状态。

     

隐藏作为窗口当前第一响应者的视图会导致视图的下一个有效键视图成为新的第一响应者。

     

此属性的值仅反映接收方的状态,并不考虑视图层次结构中接收方祖先的状态。因此,此属性可以为NO,但如果隐藏祖先,接收器仍可能被隐藏。

VS

  

此属性的值是0.0到1.0范围内的浮点数,其中0.0表示完全透明,1.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];
}

当您想隐藏某些内容时使用property hidden(布尔值)

答案 2 :(得分:0)

以上答案是正确的。但这是另一个建议。您可以更改alpha隐藏属性,而不是设置imageview's,而不是:

if (indexPath.row == 2) {
    cell.imageView.hidden = YES;
} else {
    cell.imageView.hidden = NO;
}

此外,如果您要制作自定义单元格会更好。

答案 3 :(得分:0)

所有这些答案都是正确的......只是为了简化..

cell.imageView.alpha = !(indexPath.row == 2);

or 

cell.imageView.hidden = (indexPath.row == 2);

:)

答案 4 :(得分:0)

您可以更改imageview的隐藏属性,而不是设置alpha:

if (indexPath.row == 2) {
    cell.imageView.hidden = YES;
} else {
    cell.imageView.hidden = NO;
}

或者您可以使用更好的自定义单元格。