Правильная настройка willSelectRowAtIndexPath и didSelectRowAtIndexPath для отправки выбора ячеек - PullRequest
10 голосов
/ 05 мая 2010

Чувствую, что я немного схожу с ума здесь. У меня есть подробный вид с несколькими UITextField с, несколькими UITextFields через UITAbleViewCell с и одним 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 верхнему текстовому полю, чтобы клавиатура всплывала. Я подумал, что, возможно, первый респондент воспрепятствовал щелчку (что было бы глупо), но даже после этого я не могу выполнить выбор ячеек во время редактирования.

Ответы [ 2 ]

16 голосов
/ 05 мая 2010

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

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.

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

4 голосов
/ 05 мая 2010

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

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

...