我想在特定的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设备上进行测试时,它会使应用程序崩溃。
任何解决方案......?
提前致谢。
答案 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];
}