试了很多方法也没解决,请高手帮忙看看啊。
在我滚动cellForRowAtIndexPath
的时候,在tableView添加和删除选中标记,不知道为什么。
// Configure the cell...
cell.textLabel.text = [currencyList objectAtIndex:indexPath.row];
// Check to see what currency is currently selected and checkstyle
if ([selectedCurrency isEqualToString:cell.textLabel.text]) {
// Add a tick to the selected row
cell.accessoryType = UITableViewCellAccessoryCheckmark;
// Change the text colour
cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0.5 alpha:1];
self.checkedIndexPath = indexPath;
} else {
UITableViewCell *uncheckCell = [self.tableView
cellForRowAtIndexPath:self.checkedIndexPath];
uncheckCell.accessoryType = UITableViewCellAccessoryNone;
// Change the font colour back to black
uncheckCell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}
不需要uncheck cellForRowAtIndexPath
中的cell,只要重载选中的cell就OK了。
- (void)setCheckedIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *uncheckIndexPath = self.checkedIndexPath;
_checkedIndexPath = indexPath;
[self.tableView reloadRowsAtIndexPaths:@[uncheckIndexPath]
withRowAnimation:UITableViewRowAnimationLeft];
}
再修改cellForRowAtIndexPath
。需要注意,设置UITableViewCellAccessoryNone
是给需要返回的cell。
// Configure the cell...
cell.textLabel.text = [currencyList objectAtIndex:indexPath.row];
// Check to see what currency is currently selected and checkstyle
if ([selectedCurrency isEqualToString:cell.textLabel.text]) {
// Add a tick to the selected row
cell.accessoryType = UITableViewCellAccessoryCheckmark;
// Change the text colour
cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0.5 alpha:1];
self.checkedIndexPath = indexPath;
} else {
//If cell unchecked
cell.accessoryType = UITableViewCellAccessoryNone;
// Change the font colour back to black
cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
}