Подтвердить что ты не робот

Правильная настройка willSelectRowAtIndexPath и didSelectRowAtIndexPath для отправки ячеек

Чувствую, что я здесь немного псих. У меня есть подробный вид с несколькими автономными UITextField s, несколькими UITextFields в UITAbleViewCell s и одним единственным UITAbleViewCell, который будет использоваться для хранения заметок, если таковые имеются. Я хочу, чтобы эта ячейка была выбрана, когда я в режиме редактирования. Когда я не в режиме редактирования, я не хочу его выбирать. Выбор ячейки (в режиме редактирования) приведет к запуску метода, который запустит новое представление. Я знаю, что это очень легко, но я чего-то не хватает.

Вот текущие методы выбора, которые я использую:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.editing) {
        NSLog(@"Returning nil, not in edit mode");
        return nil;
    }
    NSLog(@"Cell will be selected, not in edit mode");
    if (indexPath.section == 0) {
        NSLog(@"Comments cell will be selected");
        return indexPath;
    }
    return nil;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.editing) {
        NSLog(@"Not in edit mode. Should not have made it this far.");
        return;
    }

    if (indexPath.section == 0)
        [self pushCommentsView];
    else
        return;
}

Моя проблема действительно в 2 раза;

1) Даже когда я не в режиме редактирования, и я знаю, что возвращаю nil (из-за сообщения NSLog), я все же могу выбрать строку (она мигает синим цветом). Из моего понимания метода willSelectRowAtIndexPath этого не должно происходить. Может быть, я ошибаюсь в этом?

2) Когда я вхожу в режим редактирования, я вообще ничего не могу выбрать. метод willSelectRowAtIndexPath никогда не срабатывает, а также didSelectRowAtIndexPath. Единственное, что я делаю в методе setEditing, скрывает кнопку "Назад" при редактировании и назначает firstResponder на верхний текстовый экран, чтобы всплывать клавиатура. Я подумал, что, возможно, первый ответчик мешал клику (который был бы немым), но даже с тем, что было прокомментировано, я не могу выполнить выбор ячейки во время редактирования.

4b9b3361

Ответ 1

Добрый господин, я идиот. Я никогда не добавлял эти строки:

self.tableView.allowsSelection = NO; // Keeps cells from being selectable while not editing. No more blue flash.
self.tableView.allowsSelectionDuringEditing = YES; // Allows cells to be selectable during edit mode.

Извините за вопрос о мусоре.

Ответ 2

В документации отмечается, что tableView:willSelectRowAtIndexPath: не вызывается в режиме редактирования. Кроме того, синяя вспышка произойдет, даже если вы отмените выбор. Из документации:

Этот метод не вызывается до тех пор, пока пользователи не коснутся строки, а затем поднимут палец; строка не выбирается до тех пор, хотя она подсвечивается при касании. Вы можете использовать UITableViewCellSelectionStyleNone, чтобы отключить внешний вид выделения ячейки при касании. Этот метод не вызывается, если для свойства редактирования таблицы установлено значение YES (то есть, представление таблицы находится в режиме редактирования).