Задать вопрос
mriddi
@mriddi

Как определить, выключить или переписать gesture recognizer отвечающий за перемещение ячеек в TableView?

Второй день пытаюсь решить следующие проблемы:

1. Выключение gesture recognizer отвечающего за перемещение ячеек в TableView

2. Внесение изменения в gesture recognizer отвечающего за перемещение ячеек в TableView


Мое приложение содержит три кэстом-класса:

-NDAViewController

-NDATableView(my custom table view)

-NDACell(my custom cell for table view)


Я перевожу NDATableView экземпляр в режим редактирования (таблица постоянно работает в этом режиме):
- (void)viewDidLoad{
[super viewDidLoad];
[myTableView setEditing:YES animated:YES];}



Я хочу переписать метод который срабатывает когда перетаскиваю ячейку(свайп по ReorderControl). Для начала я попытался определить какой именно gesture recognizer и в каком UIView отвечает за данную операцию. Для этого использовал метод:
-(void) helper:(UIView*) view{
    for (UIView* sub in view.subviews) {
        NSLog(@"%@.subview=%@",NSStringFromClass ([view class]),NSStringFromClass ([sub class]));
        for(UIGestureRecognizer* gestRec in sub.gestureRecognizers)
        {
            NSLog(@"view=%@ gesture recognizer=%@",NSStringFromClass ([sub class]),NSStringFromClass ([gestRec class]));
        }
        [self helper];
    }
}



Благодаря ему я выяснил иерархию UIView и определил какие UIGestureRecognizer есть у каждого из них:

1. TableView (имеет 4 распознавателя жестов)

2. Cells (subviews of TableView, имеет 0 gesture recognizer)

3. UITableViewCellContentView (subview of Cell, имеет 1 gesture recognizer)

4. UITableViewCellEditControl (subview of Cell, имеет 0 gesture recognizer)

5. UITableViewCellReorderControl (subview of Cell, имеет 0 gesture recognizer)

6. UIView x2 (subview of Cell, имеет 0 gesture recognizer)


Я был удивлен что UITableViewCellReorderControl не имеет gesture recognizers. Я предположил что за перемещение ячеек отвечает один из четырех gesture recognizers TableView. Чтобы убедиться в этом я попытался заблоктровать их используя в ViewController следующий метод:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
return NO;};


также назначил делегатом 3 gesture recognizers(UIGobberGestureRecognizer,

UISwipeGestureRecognizer, UIScrollViewDelayedTouchesBeganGestureRecognize) of TableView — ViewController. Для UIScrollViewPenGestureRecognizer нельзя в качестве делегата использовать ViewController. Однако после этого перемещение ячеек продолжало работать. Я попробовал назначить тот же делегат и для UILongPressGestureRecognizer of UITableViewCellContentView, но и это не принесло успеха.

Помогите разобраться какой из View и его gesture recognizer отвечают за перемещение ячеек и как переписать их методы.
  • Вопрос задан
  • 3575 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
может быть там дело не в gesture recognizer, а реализация на основе touchesBegin/touchesEnd?
Ответ написан
Ваш ответ на вопрос

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

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