Я пытался пересылать события касания с одного вида на UITableView
. Но я столкнулся с проблемой.Переслать событие касания в UITableView для создания прокрутки инерции
На чертеже представлен вид прототипа, чтобы проиллюстрировать эту проблему. Белый вид в нижней половине - нормальный UITableView
. Желтый вид - UIView
, который направляет до середины UITableView
, используя hitTest:withEvent:
. Красный вид - UIButton
.
Цель состоит в том, чтобы переместить вверх и вниз панорамирование касаний от желтого вида до UITableView
внизу. Тем не менее, нажатие красного UIButton
должно по-прежнему работать.
Я пробовал 2 основных подхода, оба из которых имеют проблемы.
Первый подход заключается в добавлении UIPanGestureRecognizer
к желтому представлению, которое может использоваться для установки contentOffset
UITableView
. Проблема в том, что инерционная прокрутка табличного представления не работает с этим подходом.
Второй подход - направить касания, используя hitTest:withEvent:
в желтом виде.
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if([self.button_red pointInside: [self convertPoint:point toView:self.button_red] withEvent:event]) {
return self.button_red;
} else {
return [self.view_table hitTest:CGPointMake(self.view_table.width/2.0,self.view_table.height/2.0) withEvent:event];
}
}
hitTest:withEvent:
вызывается только тогда, когда прикосновение начинается в желтом зрения. Другими словами, всякий раз, когда перетаскивание начинается с красного изображения, он не перетаскивает перетаскивание в представление таблицы. Это недостаточно.
Можно ли перевести жест панорамы с желтого вида на UITableView
по-другому, что позволяет красной кнопке работать и позволяет работать с перетаскиванием, которая начинается с красной кнопки? Должен ли я переопределить touch event methods в желтом представлении, чтобы заставить это работать как-то? Есть ли способ сделать все это, сохраняя инерционную прокрутку?
Вы не можете установить yellowView как tableHeaderView в UITableView? –
Это хорошая идея, но refreshControl окажется в верхней части экрана. Я хотел бы сохранить refreshControl ниже желтого вида –
Хорошо, обновляет ли управление refreshControl вверх, если мы попробуем что-то подобное. [tableView addSubview: yellowView]; [tableView setContentInset: CGPointMake (0, CGRectGetHeight (yellowView.frame))]; –