Ошибка, когда я пытаюсь проверить только одну ячейку в табличном представлении

Когда я проверяю первую ячейку после загрузки - ничего не происходит, я нажимаю снова и снова - ничего не происходит. Я могу проверить другие ячейки, вторую, третью и т. Д., И только после этого я могу проверить первую ячейку. Это мой метод:

- (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];
}
Другие вопросы по тегам