2015-06-27 55 views
0

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

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

首先,如果您想隐藏某些东西,请使用隐藏的属性(布尔值)而不是alpha。 – Masterfego

+0

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

+0

你使用错误的方法Apple iOS提供隐藏和显示属性,那么你为什么使用这种类型的设置alpha。作为@Masterfego –

回答

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

使用属性是正确的。但这是另一个建议。相反设置的alpha你可以改变imageview's隐藏属性,以及像:

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

而且,它会更好,如果你将一个自定义单元格。

0

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

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

这里的问题是,这些细胞被重用,如果你在第2行显示的单元格,则该单元格将移动屏幕外,并在路径10重新用于一些细胞,该细胞将仍然具有alpha设置为0。

因此,你必须告诉细胞具有1 除非它是在indexPath 2.

的α

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

如果你比较属性的解释在docs这可能是由于各种原因更正确:

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

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

此属性的值仅反映接收者的状态,并没有考虑视图层次结构中接收者祖先的状态。因此,这个属性可以是NO,但如果隐藏祖先,接收器仍然可能被隐藏。

该属性的值在0.0到1.0,其中0.0表示完全透明,1.0表示完全不透明的范围内的浮点数。该值仅影响当前视图,不会影响其任何嵌入式子视图。

+0

这工作完美。我没有足够的声望来投票回答这个问题,但是谢谢你! – baskInEminence

+0

@ program234你可以接受这个用户的答案。 –

0

试试这个:隐藏(布尔)当你想隐藏什么

0

这个答案都是正确的..只是为了简化..

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

or 

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

:)

0

而不是设置你可以改变的ImageView隐藏属性的阿尔法以及类似的:

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

或者你可以用它更好的自定义单元格。