我正在使用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;
}
答案 0 :(得分:3)
使用didSelectRowAtIndexPath
方法获取单元格的代码不正确。你想要这个:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
为什么在选择单元格时设置单元格的文本?这应该在cellForRowAtIndexPath
数据源方法中完成。您应该只使用didSelectRow
方法切换复选标记。
答案 1 :(得分:0)
点击表格单元格后,不仅是用户界面,而且还需要更新activated
中savedData.packArray
的值。