在我的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并重新调整时,勾选出现,但是我不能让它在另一个上面工作,所以如果勾选在那里并且我进入细节视图以不确认它,则勾号不会消失。
答案 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