UITableView режим выбора ячейки при редактировании - PullRequest
5 голосов
/ 28 мая 2011

В моем UITableView, когда он входит в режим редактирования, я бы хотел, чтобы можно было выбрать только несколько ячеек. Я знаю, что класс UITableView имеет свойство allowsSelectionDuringEditing, но это относится ко всему UITableView. Я не вижу соответствующих методов делегата, чтобы установить это для каждой ячейки.

Лучшее решение, которое я могу придумать, это установить allowsSelectionDuringEditing на YES. Затем, в didSelectRowAtIndexPath, отфильтруйте все нежелательные варианты выбора, если представление таблицы редактируется. Кроме того, в cellForRowAtIndexPath измените эти ячейки selectionStyle на None.

Проблема в том, что переход в режим редактирования не перезагружает UITableViewCells, поэтому их selectionStyle не меняется до тех пор, пока они не прокрутятся за пределы экрана. Итак, в setEditing, я также должен перебрать видимые ячейки и установить их selectionStyle.

Это работает, но мне просто интересно, есть ли лучшее / более элегантное решение этой проблемы. Основная схема моего кода прилагается. Любые предложения с благодарностью! Спасибо.

- (void) tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {

    if (self.editing && ![self _isUtilityRow:indexPath]) return;
    // Otherwise, do the normal thing...
}

- (UITableViewCell*) tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {

    // UITableViewCell* cell = ...

    if (self.editing && ![self _isUtilityRow:indexPath])
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    else
    {
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    }

    return cell;
}

- (void) setEditing:(BOOL)editing animated:(BOOL)animated {

    [super setEditing:editing animated:animated];

    if (editing)
    {
        for (UITableViewCell* cell in [self.tableView visibleCells])
        {
            if (![self _isUtilityRow:[self.tableView indexPathForCell:cell]])
            {
                cell.selectionStyle = UITableViewCellSelectionStyleNone;
            }
        }
    }
    else
    {
        for (UITableViewCell* cell in [self.tableView visibleCells])
        {
            if (![self _isUtilityRow:[self.tableView indexPathForCell:cell]])
            {
                cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            }
        }
    }
}

1 Ответ

0 голосов
/ 17 февраля 2013

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

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.

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

при переходе в режим редактирования, используйте функцию для фильтрациипервый уровень выбора, затем второй уровень выбора

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