从父视图中删除图像

时间:2012-04-03 21:57:57

标签: iphone objective-c uitableview uinavigationcontroller

在我的iPhone应用程序中,我有一个表格视图,如果对象的'isConfirmed'值为true,我会在单元格中添加勾号图像。当我进入详细视图时,我可以编辑确认的值,并在弹回主表视图后,我需要查看更新,而不仅仅是当我从新视图中查看主表时。

所以我在我的tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中使用了这段代码:

UIImageView *tickImg = nil;

    //If confirmed add tick to visually display this to the user
    if ([foodInfo.isConfirmed boolValue])
    {
        tickImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ConfirmedTick.png"]];
        [tickImg setFrame:CGRectMake(0, 0, 32, 44)];
        [cell addSubview:tickImg];
    }
    else 
    {
        [tickImg removeFromSuperview];
    }

它成功地将勾选图像添加到具有isConfirmed真值的单元格中,当进入对象的详细视图并将其设置为TRUE并重新调整时,勾选出现,但是我不能让它在另一个上面工作,所以如果勾选在那里并且我进入细节视图以不确认它,则勾号不会消失。

2 个答案:

答案 0 :(得分:1)

如果[foodInfo.isConfirmed boolValue]为false,则执行此代码:

UIImageView *tickImg = nil;
[tickImg removeFromSuperview];

显然这不起作用 - tickImg没有指向UIImageView。您需要以某种方式保存对UIImageView的引用。您可以将tickImg变量添加到类的标题中,或将其作为属性或其他内容。

答案 1 :(得分:0)

你在调用[self.tableView reloadData];在VC的viewWillAppear:?

此外,您用于配置单元的方法容易出错。由于tableView正在重用单元格,因此当您将单元格出列时,无法确定单元格处于什么状态。

更好的方法是始终如一地构建细胞:

static NSString *CellIdentifier = @"MyCell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    // always create a tick mark
    UIImageView *tickImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ConfirmedTick.png"]];
    tickImg.tag = kTICK_IMAGE_TAG;
    tickImg.frame = CGRectMake(0, 0, 32, 44);
    [cell addSubview:tickImg];
}

// always find it
UIImageView *tickImg = (UIImageView *)[cell viewWithTag:kTICK_IMAGE_TAG];

// always show or hide it based on your model
tickImg.alpha = ([foodInfo.isConfirmed boolValue])? 1.0 : 0.0;

// now your cell is in a consistent state, fully initialized no matter what cell
// state you started with and what bool state you have