我的iPhone应用程序中有一个分组表视图,其中包含一天中所有24小时的列表。当用户选择表视图中的一个单元格时,它会在其附件视图中显示一个复选标记,并通过NSUserDefaults保存数据。当用户加载视图时,这意味着我必须从NSUserDefaults中提取信息并在相应的单元格上显示复选标记。这工作正常,直到我开始在视图中滚动。然后发生这种情况:
我已设置didSelectRowAtIndexPath
,以便在选择一行时取消选择所有其他行。这很好用,但只需滚动列表,就会开始选择看似随机的项目。如果我继续向上和向下滚动几次,则会选择所有项目。如果我单击其中一个单元格,则选择一个单元格而取消选择其他单元格(这应该是这样)。
但是为什么只通过滚动选择单元格呢?这是我的cellForRowAtIndexPath
方法,问题可能位于:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSString *cellValue;
if (indexPath.row == 0) {
cellValue = @"00:00";
} else if (indexPath.row == 1) {
cellValue = @"01:00";
} else if (indexPath.row == 2) {
cellValue = @"02:00";
} else if (indexPath.row == 3) {
cellValue = @"03:00";
} else if (indexPath.row == 4) {
cellValue = @"04:00";
} else if (indexPath.row == 5) {
cellValue = @"05:00";
} else if (indexPath.row == 6) {
cellValue = @"06:00";
} else if (indexPath.row == 7) {
cellValue = @"07:00";
} else if (indexPath.row == 8) {
cellValue = @"08:00";
} else if (indexPath.row == 9) {
cellValue = @"09:00";
} else if (indexPath.row == 10) {
cellValue = @"10:00";
} else if (indexPath.row == 11) {
cellValue = @"11:00";
} else if (indexPath.row == 12) {
cellValue = @"12:00";
} else if (indexPath.row == 13) {
cellValue = @"13:00";
} else if (indexPath.row == 14) {
cellValue = @"14:00";
} else if (indexPath.row == 15) {
cellValue = @"15:00";
} else if (indexPath.row == 16) {
cellValue = @"16:00";
} else if (indexPath.row == 17) {
cellValue = @"17:00";
} else if (indexPath.row == 18) {
cellValue = @"18:00";
} else if (indexPath.row == 19) {
cellValue = @"19:00";
} else if (indexPath.row == 20) {
cellValue = @"20:00";
} else if (indexPath.row == 21) {
cellValue = @"21:00";
} else if (indexPath.row == 22) {
cellValue = @"22:00";
} else if (indexPath.row == 23) {
cellValue = @"23:00";
}
if ([[prefs valueForKey:@"quiet_hours_time_interval_from"] isEqualToString:cellValue]) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
cell.textLabel.textColor = [UIColor colorWithRed:72.0 / 255 green:104.0 / 255 blue:152.0 / 255 alpha:1];
}
cell.textLabel.text = cellValue;
return cell;
}
prefs
等于[NSUserDefaults standardUserDefaults]
,我将(正确)选定的单元格的确切值保存到quiet_hours_time_interval_from
键。
希望你们能帮忙。
答案 0 :(得分:0)
检查prefs valueForKey后需要一个ELSE。您需要清除该ELSE中的accessoryType。
您看到的是UITableView的默认行为。单元格被缓存,只在需要时重新创建。这就是dequeueReusableCell顶部的位置。
因此,由于您没有任何清除accessoryType的代码,最终所有代码都会被检查。