在不更改单元格上的accessoryType

时间:2013-06-02 13:59:39

标签: objective-c uitableview

我在TableView中有一个产品列表。该列表由WCF调用填充。我可以在日志中看到产品正在加载正确的值。其中一个值是一个名为Bought的布尔值。我想使用它来显示(在tableviewCell上有一个复选标记),如果产品是否被购买

这里我加载了单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ProductCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    // Configure the cell...
    id prod = [_productList objectAtIndex:indexPath.row];

    cell.textLabel.text = [prod ProductName];
    NSString *stringAmount = [NSString stringWithFormat:@"%@", [prod Amount]];
    cell.detailTextLabel.text = stringAmount;
    if (![prod Bought]) {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }


    return cell;
}

在这里我改变了值

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    
    [self markBought];
    [tableView reloadData];
    [self reloadInputViews];
}

didSelectRowAtIndexPath方法有效(我可以看到数据库中的值发生变化) 但勾选标记始终显示 -

我怀疑我正在加载Accessorytype错误 - 但我真的不知道如何以不同的方式进行。

1 个答案:

答案 0 :(得分:1)

[prod Bought]会返回NSNumber个对象,因此您必须替换

if (![prod Bought]) ...

通过

if (![[prod Bought] boolValue]) ...