Второй день пытаюсь решить следующие проблемы:
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 отвечают за перемещение ячеек и как переписать их методы.