在UITableViewCell中更新UIButton上的imageView

时间:2010-02-17 20:09:10

标签: iphone objective-c uitableview refresh uibutton

我有自定义UITableViewCells(在界面构建器中创建),用于静态UITableView,为了参数我将调用 AddUserTableViewController (即我做不使用自动释放的单元格,因为我只有5行)。

在顶部单元格(用于用户名)中,我嵌入了UIButton我用来打开UIActionSheet,而UIImagePicker又允许[button.imageView.image = imageFromImagePicker]在UIButton上设置图像(即[self.tableView reloadData])。该按钮具有默认图像(在IB中添加),其中显示“添加图像”。

按钮上的图像设置没有问题,即使我导航到任何表格单元格的详细信息页面,但包含该按钮的用户名单元格除外,它仍然保留在原位。当我选择此单元格时,一旦从“添加名称”详细信息视图导航回 AddUserTableViewController ,图像就会消失并且不再出现。显示上面提到的“添加图像”默认图像。

我尝试了很多策略:

1)在[button.imageView setNeedsDisplay]方法中使用[self.view setNeedsDisplay]viewWillAppearcellForRowAtIndexPath;

2)在willDisplayCell:forRowAtIndexPath:方法中使用上述方法;

3)在覆盖button.imageView.image方法中使用上述方法;

当我在程序中放置调试NSLog语句时,我可以看到UIImagePicker属性仍然设置为使用UITableViewCell选择的图像,但它没有显示(来自笔尖的默认图像是显示)。

正如我上面提到的,只有通过选择嵌入了UIButton的{​​{1}}离开 AddUserTableViewController ,才会发生这种情况。

我目前不知道该做什么,并且非常感谢任何人都可以提供的帮助。我只需要找到一种方法来在上述情况下更新嵌入式UIButton上的图像。

我添加了cellForRowAtIndexPath:方法中的一部分代码仅用于说明目的 -

//populates the personal info section
if (section == kPersonalInfoAddSection) {

    //Covers the add image button and the name adding field
    if (row == kNameRow) {


        UILabel *nameLabel = (UILabel *)[nameCell viewWithTag:kMainTextTag];
        UILabel *reqLabel = (UILabel *) [nameCell viewWithTag:kSubTextTag];
        //UIButton *imageButton = (UIButton *) [nameCell viewWithTag:kImageTag];

        if (mainUser.imagePath != nil) {

            UIImage *img = [UIImage imageWithContentsOfFile:mainUserImagePath];
            imageButton.imageView.image = img;
            [imageButton.imageView setNeedsDisplay];
            //[imageButton setNeedsDisplay];
            //[nameCell setNeedsDisplay];
            NSLog(@"************************** Added the BESPOKE image (%@)to the image button", img);
        }
        else {
            NSLog(@"************************** Added the DEFAULT image (%@)to the image button", addUserImage);
            imageButton.imageView.image = addUserImage;
        }


        UIColor *blackText = [[UIColor alloc] initWithWhite:0 alpha:1];


        NSString *firstName;

        if (mainUser.firstName){

            nameLabel.textColor = blackText;
            firstName = mainUser.firstName;

        }
        else {

            nameLabel.textColor = reqLabel.textColor;
            firstName = NAME_STRING;
        }

        NSString *lastName = (mainUser.lastName)? mainUser.lastName : EMPTY_STRING;


        NSString *name = [[NSString alloc] initWithFormat:@"%@ %@", firstName, lastName];

        nameLabel.text = name;
        reqLabel.text = REQUIRED_STRING;

        [blackText release];

        return nameCell;

    }

1 个答案:

答案 0 :(得分:0)

cellForRowAtIndexPath中您是否正在做一些会“取消”图片的内容?