自定义视图添加到单元格时更改单元格内容视图

时间:2012-07-16 06:55:30

标签: iphone ios ipad uitableview

我创建了一个带xib的uiviewcontroller来添加uitableview单元格。这是代码。

@interface CustomeCellHome : UIViewController{

    IBOutlet UIImageView *imgViewBack;

    // will have number of labels and imageviews.
}
@property (nonatomic, retain) UIImageView *imgViewBack;


@implementation CustomeCellHome
@synthesize imgViewBack;

所有这个IBOutlet都连接到xib。

现在我将其添加到我的uitableview单元格中。这是代码。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 150;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
//    }


    CustomeCellHome *objCell = [[CustomeCellHome alloc] init];
    [objCell.view setTag:indexPath.row];
    [cell.contentView addSubview:objCell.view];

    objCell.imgViewBack.image = [UIImage  imageNamed:@"unsel.png"];

    [objCell release];
    return cell;
}

现在我想在选择行时更改此imgViewBack图像。这是代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    CustomeCellHome *objCCell = [[CustomeCellHome alloc] init];
    objCCell.view = [cell viewWithTag:indexPath.row];
    objCCell.imgViewBack.image = [UIImage imageNamed:@"sel.png"];

}

但是我的imgViewBack没有改变它的图像。不要弄错了。有什么建议吗?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果你必须像你一样使用viewController(可能这不是你需要的),我可以看到你的代码几乎没有问题。

1)而不是[objCell.view setTag:indexPath.row];使用[objCell.view setTag:indexPath.row+1];否则当indexPath.row = 0时我会遇到问题(我认为0也是superview的标签)。

2)不要释放viewController,如果你需要保留它。
(但是你需要将它保存在一些数据结构中,以便以后你可以释放它......)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = nil;

    // u will have problems reusing those cells...
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   // if(cell == nil) 
   // { 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        CustomeCellHome *objCell = [[CustomeCellHome alloc] init];

        [objCell.view setTag:indexPath.row+1];
        [cell.contentView addSubview:objCell.view];

        objCell.imgViewBack.image = [UIImage imageNamed:@"image1.png"];

        //[objCell release]; // don't release now, add it to some data structure so u can release later
   // }

    return cell;
}

2)然后在didSelectRowAtIndexPath中检索单元格的viewController并更改其imgViewBack属性。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // get the cell
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    // get the cell's viewController
    UIView *aView = [cell.contentView viewWithTag:indexPath.row+1];
    CustomeCellHome *objCCell = (CustomeCellHome *)[aView nextResponder];

    // update the image
    objCCell.imgViewBack.image = [UIImage imageNamed:@"image2.png"];
}  

这将改变图像,但这不是一个完美的解决方案,如果您重复使用单元格,您将遇到问题...如果您真的需要使用viewController,请尝试重新考虑。