В моем 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;
}
}
}
}