UITableViewCell复选标记切换不起作用

时间:2014-07-03 22:22:23

标签: ios objective-c uitableview

我正在使用UITableViewCell

当我点击它时,它会在第一次切换之间切换: UITableViewCellAccessoryNone& UITableViewCellAccessoryCheckmark

当我点击它时,我甚至得到NSLogs,表明切换应该正常工作。

但从视觉上来说,只有我第一次点击单元格才能实际切换。有什么想法吗?

如果我关闭并重新打开viewcontroller,正确显示复选标记的复选标记(我保存了这些),再次只能切换一次。

请帮忙吗?

这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier" forIndexPath:indexPath];
int i = indexPath.row;

cell.textLabel.text = [[savedData.packArray objectAtIndex:i] name];
if ([[[savedData packArray] objectAtIndex:i] owned])
{
    cell.detailTextLabel.text = @"Owned";
}
else
{
    cell.detailTextLabel.text = @"$0.99";
}

if ([[savedData.packArray objectAtIndex:i] owned])
{
    if ([[savedData.packArray objectAtIndex:i] activated])
    {
        [[savedData.packArray objectAtIndex:i] setActivated:NO];
        cell.accessoryType = UITableViewCellAccessoryNone;
        NSLog(@"No checkmark");
        //[cell setSelected:NO];
    }
    else
    {
        [[savedData.packArray objectAtIndex:i] setActivated:YES];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        NSLog(@"Yes checkmark");
        //[cell setSelected:YES];
    }
    [self saveData];
}
else
{
    NSString *msg = [NSString stringWithFormat:@"Unlock %@?", [[savedData.packArray objectAtIndex:i] name]];
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Unlock for $0.99?" message:msg delegate:self cancelButtonTitle:@"No Thanks" otherButtonTitles:@"Purchase", nil];
    [av show];
    //[cell setSelected:NO];
    cell.accessoryType = UITableViewCellAccessoryNone;
}

[self saveData];
//[cell setSelected:NO];
//return indexPath;
}

2 个答案:

答案 0 :(得分:3)

使用didSelectRowAtIndexPath方法获取单元格的代码不正确。你想要这个:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

为什么在选择单元格时设置单元格的文本?这应该在cellForRowAtIndexPath数据源方法中完成。您应该只使用didSelectRow方法切换复选标记。

答案 1 :(得分:0)

点击表格单元格后,不仅是用户界面,而且还需要更新activatedsavedData.packArray的值。