The way I have solved this problem is in a way that is not that clean, but it works. Please let me know if there's a better way to do this.
I have overridden hitTest
for my custom UIView
so that it directs touches to the UITableView
underneath. Then in the UITableView
I am handling the gestures through touchesBegan
, touchesMoved
, etc. There I am also calling touchesBegan
on the UIView
.
In this way touches are handled by two views.
The reason why I am not doing the other way around (having UIView
's touchesBegan
calling UITableView
's touchesBegan
) is that gestures recognizers on the UITableView
would not work.
UIView
subclass' hitTest
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// tview is the UITableView subclass instance
CGPoint tViewHit = [tView convertPoint:point fromView:self];
if ([tView pointInside:tViewHit withEvent:event]) return tView;
return [super hitTest:point withEvent:event];
}
UITableView
subclass's touchesBegan
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:touch.view];
// ....
// view is the UIView's subclass instance
[view touchesBegan:touches withEvent:event];
}