我制作了一个大的UITableView
,其中包含27个静态UITableViewCell
s。选择UITableViewCell
时,应将其accessoryType
设置为UITableViewAccessoryCheckmark
,将最后选择的UITableViewCell
accessoryType
设置为UITableViewAccessoryNone
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// get an NSInteger from NSUserDefaults
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:savedInteger inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
[self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:savedInteger inSection:0]];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// get the NSInteger again
UITableViewCell *lastCell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:savedInteger inSection:0]];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
lastCell.accessoryType = UITableViewAccessoryNone;
cell.accessoryType = UITableViewAccessoryCheckmark;
// save indexPath.row in NSUserDefaults and do some other stuff
如果您选择的UITableViewCell
靠近上次选择的UITableViewCell
,但最后选择的UITableViewCell
约为11行左右,那么{{1} }是UITableViewCell *lastCell
,复选标记不会消失。
为什么它会像那样,我该如何解决?提前谢谢。
答案 0 :(得分:0)
cellForRowAtIndexPath只返回可见单元格,因为UITableView会重复使用单元格(当您从顶部滚动单元格时,它只初始化几个单元格,依此类推,这样有效)
查看类似问题here
答案 1 :(得分:0)
cellForRowAtIndexPath 将返回 nil 。
因此,请检查当前选定的单元格是否可见。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// get the NSInteger from NSUserDefaults
NSIndexPath *previousSelection = [NSIndexPath indexPathForRow:savedInteger inSection:0];
if ([tableView.indexPathsForVisibleRows containsObject:previousSelection]) {
UITableViewCell *lastCell = [tableView cellForRowAtIndexPath:previousSelection];
lastCell.accessoryType = UITableViewAccessoryNone;
}
// save indexPath.row in NSUserDefaults
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewAccessoryCheckmark;
// do other stuff
}
此外,为了确保首先使用所需的 accessoryType 创建表格视图单元格,请在 accessoryType >的cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// get the table view cell and set the details
cell.accessoryType = UITableViewAccessoryNone;
// get the NSInteger from NSUserDefaults
if (indexPath.row == savedInteger) {
cell.accessoryType = UITableViewAccessoryCheckmark;
}
return cell;
}