Мне удалось воспроизвести это поведение, даже не используя табличное представление, а только пользовательское представление, и это действительно выглядит странно - если мы возвращаем кнопку из hitTest, действие кнопки запускается не во всей области серого представления, а скорее только на некотором расстоянии вокруг кнопки.
Я добавил тестовое представление с распознавателем жестов касания, которое ищет различия в поведении кнопок, и оно работает, как и ожидалось. Таким образом, в качестве обходного пути вы можете заменить кнопку распознавателем вида плюс жест.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
return nil;
}
// if (CGRectContainsPoint(self.bounds, point)) {
// return self.testButton; // fires only at some distance
// }
if (CGRectContainsPoint(self.bounds, point)) {
return self.testView; // fires for every point inside gray view
}
return [super hitTest:point withEvent:event];
}
- (IBAction)testButtonTouchUpInside:(UIButton *)sender
{
NSLog(@"BTN HIT"); // Not OK
}
- (IBAction)testViewTap:(UITapGestureRecognizer *)sender
{
NSLog(@"VIEW TAP"); // OK
}