Проблема в заголовке раздела таблицы с методом hitTest - PullRequest
0 голосов
/ 27 мая 2019

enter image description here

Я настраиваю вид lightGray.Представление lightGray имеет кнопку свойства.BackgroundColor кнопки имеет красный цвет.

Я перезаписываю метод hitTest в представлении lightGray.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
        if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
            return nil;
        }

        if([self pointInside:point withEvent:event]){
             return self.testButton;
        }

        return nil;

    }

В результате курсор в точке на изображении выше.Я нажимаю кнопку, чтобы ответить.

enter image description here

Если я щелкну в левой области вида lightGray.Красная кнопка не смогла ответить.

В чем причина?

Моя настоящая проблема - та же проблема в заголовке раздела таблицы.Я пишу это демо, чтобы проверить и задать этот вопрос.

1 Ответ

0 голосов
/ 27 мая 2019

Мне удалось воспроизвести это поведение, даже не используя табличное представление, а только пользовательское представление, и это действительно выглядит странно - если мы возвращаем кнопку из 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...