在UITableViewCell中动态显示图像

时间:2012-02-14 16:04:59

标签: ios image dynamic uitableview

我有一个UITableViewCell,它是滚动禁用的,有固定的部分和行。

有两个部分,第0部分有1行,第1部分有几行。

tableView供用户做出一些选择。

因此,第一部分(只有一行)将显示用户选择的结果

毫无疑问第二部分(有几行)可供选择。

现在我想将图像放在第一部分唯一行的单元格中,

此图像将根据用户的选择而改变。

很容易判断应该显示哪个png图像,但我无法更新它。

我尝试使用单元格的imageView,并在那里手动分配UIImageView或UIView来显示这些图像。

但是所有这些都不起作用,我的意思是他们只是保留他们在开头显示的内容并且永远不会改变它,即使我将视图的背景或图像设置为新的png。

我试过像

这样的方法

[myImage setNeedsDisplay]用于手动分配的视图,

[thatCell setNeedsDiaplsy]& [self.tableView reloadData]用于该单元格的imageView,

但徒劳无功。

所以我想知道如何实现在不同情况下在UITableViewCell中动态显示图像的功能?

非常感谢!

__ _ __ 更新行 _ ____

对不起,我没有提供我的代码。

他们在这里。

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     static NSString *inOutTableCellIdentifier = @"DealTableViewIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inOutTableCellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                   reuseIdentifier:inOutTableCellIdentifier] autorelease];
    cell.textLabel.font = [UIFont fontWithName:cMyFont size:[UIFont systemFontSize]];
    cell.detailTextLabel.font = [UIFont fontWithName:cMyFont size:[UIFont smallSystemFontSize]];
     // I tried using both imageView and UIView here, but won't work

     if (indexPath.section == 0) {   
        //cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"moneyCell.png"]];
        cell.backgroundColor = [UIColor cyanColor];
       // cell.imageView.image = [UIImage imageNamed:@"dealDone2.png"];
        self.undoneIcon = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease];
        //self.undoneIcon.image = [UIImage imageNamed:@"dealUndone2.png"];
        self.undoneIcon.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"dealUndone2.png"]];
        [cell.contentView addSubview:self.undoneIcon];
        ....  // deal with other rows in section 1
        return cell;
} 
// and this is the method that update the image, the images are named "dealDoneX.png",
// where X is an integer from 0 to 4.
- (void)checkUndoneDegree {  // here I also tried 2 ways corresponding to UIView or a cell's imageView, but neither works well.
int i = 0;
if (self._date)
    i++;
if (self.moneyTextField.text)
    i++;

if (self._incomingAccount)
    i++;
if (self._expensingAccount)
    i++;
if (_dealType != kTransferView)
    if (self._type)
        i++;
NSLog(@"undone degree: %d",i);
NSString *imageName = [@"dealUndone" stringByAppendingFormat:@"%d",i];
self.undoneIcon.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:imageName]];
[self.undoneIcon setNeedsDisplay];
//    NSUInteger p[2] = {0,0};
//    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath    indexPathWithIndexes:p length:2]];
//    [cell setNeedsDisplay];
}

每当我更新表的数据时,比如更改某些单元格的某些文本,

我会调用[self checkUndoneDegree]然后调用[self.tableView reloadData],

但图片永远不会更新,至少从屏幕上看。

我甚至尝试将决定哪个png的代码放在

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

方法,但它只能使视图显示第一个png,而不进行任何更新。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. 将您的 undoneDegree (在代码中由 i 变量表示)变为视图控制器的ivar,因此可以在所有方法中访问它,也可以在UITableView中访问委托和数据源方法。
  2. 忘掉 setNeedsDisplay 方法。由于您使用UITableView显示内容,因此您需要按照规则进行播放。这意味着您应该使用reloadSections:withRowAnimation:方法。
  3. 再次检查是否需要 self.undoneIcon 。我很确定imageView属性应该这样做。也就是说,如果你真的想在单元格中显示图像。如果您想通过操纵单元格的背景来创建某种进度条,请使用backgroundView属性,或者只在您的单元格中放置UIProgressView。在查看您的代码之后,这就是我认为您想要做的事情。