UITableView Cell中的复选标记

时间:2012-04-25 04:23:06

标签: iphone uitableview checkbox checkmark

我想在特定的TableView Cell中使用Checkmark。

所以我使用了代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

newRow = [indexPath row];
oldRow = [lastIndexPath row];

if (newRow != oldRow) {
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath: lastIndexPath]; 
    oldCell.accessoryType = UITableViewCellAccessoryNone;

    lastIndexPath = indexPath; 
}
else{
    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
    newCell.accessoryType = UITableViewCellAccessoryCheckmark;
    lastIndexPath = indexPath;
}}

它在iPhone模拟器中工作正常。 但是在iPhone设备上进行测试时,它会使应用程序崩溃。

任何解决方案......?

提前致谢。

2 个答案:

答案 0 :(得分:2)

导致崩溃的最可能原因是您的ivar,lastIndexPath。您在不保留值的情况下存储值,因此可以随时释放它们。尝试定义名为lastIndexPath的属性(retain用于手动引用计数,strong用于自动引用计数。然后,您可以使用self.lastIndexPath = indexPath[self setLastIndexPath:indexPath]

此外,强行更改此类单元格内容也很糟糕。最好存储选定的索引,然后重新加载表数据。为获得最高效率,仅更新已更改的单元格。让cellForRowAtIndexPath:方法打开和关闭复选标记。

答案 1 :(得分:0)

只需在“cellForRowAtIndexPath”方法中编写以下代码即可。

[[cell imageView] setImage:[UIImage imageNamed:@"tickmarkBlue.png"]];
[[cell imageView] setHidden:YES]; 

if(<your condition here>)
{
      [[cell imageView] setHidden:NO];
}