Проблема с переопределением touchesEnded для подкласса UICollectionViewCell?

У моего подкласса UICollectionViewCell есть булиево свойство editingMode. Нужно оно для того, чтобы помимо прочего в этом "режиме" не срабатывало событие didSelectItemAtIndexPath для делегата UICollectionView. Я переопределяю touchesEnded для этого подкласса следующим образом:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!_editingMode) {
        [super touchesEnded:touches withEvent:event];
    }
    else {
        // My custom behavior
    }
}

Пока я не включаю editingMode, все идет нормально, и вызов touchesEnded для super приводит к ожидаемому результату: didSelectItemAtIndexPath вызывается.
Затем я произвожу следующие действия:
1. Выставляю editingMode = YES.
2. Нажимаю на ячейку.
3. Обратно выставляю editingMode = NO.
4. Вновь нажимаю на ячейку.
После этих действий, несмотря на то, что touch-события перехватываются и touchesEnded для super вызывается, didSelectItemAtIndexPath уже не отрабатывает.

Забавно, что точно такой же код для подкласса UITableViewCell работает, как ожидается.
Как вы думаете, в чем может быть проблема?
  • Вопрос задан
  • 2440 просмотров
Решения вопроса 1
@agee Автор вопроса
Проблема решена.
Я переписал touchesEnded следующим образом:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    if (_editingMode) {
        // Do my thing
    }
}

А игнорирование дефолтного поведения в режиме editingMode я уже реализовал в didSelectItemAtIndexPath:
GDCollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
    if (cell.editingMode)
        return; // Do nothing in editing mode

Пожалуй, так нужно было сделать с самого начала.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Flanker_4
@Flanker_4
Вот только ограничение на выделение нужно было делать в
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы