試了很多方法也沒解決,請高手幫忙看看啊。
在我滾動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];
}