2010-10-27 65 views
0

我添加了一个uiimageview作为子视图到我的cell.and然后在它的顶部放置一个标签,使它看起来像一个按钮。但whwn桌面向上或向下滚动图像似乎得到再次画。这变得非常丑陋,因为我的图像具有透明效果,一旦它出现并返回就会丢失。桌面视图中的图像

+0

发表您的cellForRowAtIndexPath方法。从看起来你错误地重复使用单元格。或者,更好的搜索 - 所以这里有很多类似的问题 – Vladimir 2010-10-27 13:54:28

+1

您的问题中应该至少有一个问号:) – willcodejavaforfood 2010-10-27 13:54:44

+0

@Vladimir:我为每个单元格使用了一个单独的标识符。没有帮助。我无法粘贴代码作为它的一部分我的工作\ – humblePilgrim 2010-10-27 14:55:03

回答

3

好吧,我会尽力去猜测你的代码是什么样子:)

如果图像是画,这意味着你将它们添加了电池每次表视图查询数据源多次:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView @"SomeID"]; 
    if (cell == nil) { 
     // Create cell 
    } 
    UIImageView *imView = ... //Create and initialize view 
    [cell.contentView addSubview:imView]; 
    ... 
    return cell; 
} 

因此,每当您的单元格出现在屏幕上(在用户滚动表格后)图像视图的新实例被添加到单元格中。正确的做法是添加图像视图只有一次 - 创建细胞时,然后获取和设置现有的图像视图:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView @"SomeID"]; 
    if (cell == nil) { 
     // Create cell 
     UIImageView *imView = ... //Create and initialize view 
     imView.tag = 1000; // or any other int value 
     [cell.contentView addSubview:imView]; 
    } 
    UIImageView *iView = (UIImageView *)[cell.contentView viewWithTag:1000]; 
    iView.image = ...// set required image 
    ... 
    return cell; 
} 
每个小区由表重用查看现有的图像视图是时候

所以用这个方法填充适合当前行的图像。

我为每个单元使用了一个单独的标识符。

通常它是不是一个好主意 - 在这种情况下,表将无法再利用其细胞和你可能会严重性能问题

+0

这是伟大的!它现在的工作。但是我做了一个改变。以后我添加图像添加到imView创建时它本身仍然有效。为什么你以后添加图像? – humblePilgrim 2010-10-28 04:55:52

+0

@Mithun - 稍后我添加了图像,假设每个单元格可以具有不同的图像,以便能够为任何行重新使用任何旧单元格。如果所有图像都相同,则可以在单元创建时将其设置为一次 – Vladimir 2010-10-28 05:48:29