Ошибка, когда я пытаюсь проверить только одну ячейку в табличном представлении
Когда я проверяю первую ячейку после загрузки - ничего не происходит, я нажимаю снова и снова - ничего не происходит. Я могу проверить другие ячейки, вторую, третью и т. Д., И только после этого я могу проверить первую ячейку. Это мой метод:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = indexPath.row;
NSUInteger oldRow = lastIndexPath.row;
if (oldRow != row) {
UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:lastIndexPath];
oldCell.accessoryType = UITableViewCellAccessoryNone;
lastIndexPath = indexPath;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Или, может быть, вы можете посоветовать другой способ сделать это (проверяя только одну ячейку в табличном представлении), потому что я нашел только модели с большим количеством кода и трудно понять.
2 ответа
Решение
Это потому, что сначала ваш lastIndexPath
переменная nil
, так lastIndexPath.row
вернет 0. Если вы нажмете на первую строку, эта строка также 0, поэтому он не будет вводить if
заявление. Заменить это утверждение на: if (!lastIndexPath || oldRow != row)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell;
//cell creation code
cell.accessoryType = nil != lastIndexPath && lastIndexPath.row == indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray* reloadRows = nil == lastIndexPath ? @[indexPath] : @[lastIndexPath, indexPath];
lastIndexPath = indexPath;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[tableView reloadRowsAtIndexPaths:reloadRows withRowAnimation: UITableViewRowAnimationAutomatic];
}