UITableViewCell пользовательское редактированиеAccessoryView - не корректно отклонено - PullRequest
2 голосов
/ 09 октября 2011

Я реализовал пользовательский вид редактирования аксессуаров, как описано в моем ответе на этот вопрос.По большей части это работает очень хорошо, но я заметил небольшую проблему с этим.

Когда я прокручиваю или выбираю другую строку в табличном представлении, мой пользовательский аксессуар редактирования не закрывается.При использовании стандартного аксессуара для редактирования (кнопка удаления) происходит касание в любом месте на столе, которое используется для удаления представления удаления аксессуара - вы можете увидеть это сами, например, во встроенном приложении Notes или в любом другом месте сстандартный вид аксессуара для редактирования.

Это должно быть потому, что я возвращаю UITableViewEditingStyleNone, когда я нахожусь в режиме смахивания для удаления.Однако, если я вернусь в любой другой режим, мой пользовательский аксессуар для редактирования не будет отображаться.

Как вернуть функциональность стандартного стиля редактирования, когда касание в любом месте представления таблицы отклоняет аксессуар редактирования?

Ячейка не разделена на подклассы, но она загружается из файла пера с пользовательским макетом.Вид аксессуара для редактирования является частью файла пера и подключен через выход EditAccessoryView.

Мне удалось добиться желаемого эффекта на полпути, сохранив путь индекса строки с изменением смахивания и выбрав эту ячейку из режима редактирования, если выбрана другая строка или начинается прокрутка таблицы.Тем не менее, я хотел бы сделать это правильно.

1 Ответ

2 голосов
/ 12 апреля 2012

Мне удалось решить эту проблему, но, к сожалению, это требует дополнительных усилий и не так просто, как установка пары свойств.

По моему

- (UITableViewCellEditingStyle)tableView:(UITableView *)_tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

метод, который я возвращаю UITableViewCellEditingStyleNone, чтобы появился мой пользовательский editingAccessoryView. В этом методе я также делаю это:

self.tableView.scrollEnabled = NO;
if(self.editingPath)
{
    [[tableView cellForRowAtIndexPath:editingPath] setEditing:NO animated:YES];
}

self.editingPath = indexPath;    
for (UITableViewCell *cell in [tableView visibleCells])
{
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

Это отключает прокрутку, а затем сохраняет indexPath, который мы провели для дальнейшего использования. Если вы проведете пальцем по другой строке во время редактирования строки, она отредактирует первую строку и отредактирует вторую строку, как ведут себя приложения Apple. Я также установил ячейку selectionStyle на всех видимых ячейках на UITableViewCellSelectionStyleNone. Это уменьшает синее мерцание, когда пользователь выбирает другую ячейку во время редактирования.

Далее нам нужно отклонить accessoryView при нажатии другой ячейки. Для этого мы реализуем этот метод:

-(NSIndexPath *)tableView:(UITableView *)_tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.editingPath)
{
    UITableViewCell *c = [tableView cellForRowAtIndexPath:self.editingPath];
    [c setEditing:NO animated:YES];

    self.tableView.scrollEnabled = YES;
    self.editingPath = nil;
    for (UITableViewCell *cell in [tableView visibleCells])
    {
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    }

    return nil;
}

return indexPath;
}

Что происходит, когда кто-то собирается щелкнуть ячейку, если мы редактируем, то редактируем эту ячейку и ничего не возвращаем.

также для

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

Я возвращаю YES, чтобы разрешить редактирование ячеек, которые я хочу, чтобы пользователь мог удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...