Веб-просмотр какао игнорирует события мыши в областях без содержимого - PullRequest
1 голос
/ 31 января 2012

У меня прозрачный веб-вид, который представляет собой большой прямоугольник. Загружаемая веб-страница имеет меньшие прямоугольники, которые не заполняют весь веб-вид. Таким образом, в тех пространствах, которые не заняты div, вы можете видеть через веб-представление любое окно или приложение позади. Хотя вы можете видеть сквозь, вы не можете нажать сквозь. Мне нужно иметь возможность просматривать веб-представление в тех частях, где нет активного содержимого. Есть идеи?

Одна из моих идей заключалась в том, чтобы иметь прозрачный nsview поверх веб-представления, перехватывать нажатие мыши, получать координаты, затем ссылаться на эту координату в веб-представлении и видеть, есть ли там активный контент, и если да, передавать событие мыши вниз к веб-представлению, но если нет, игнорирует его / пропускает. Это имеет смысл для меня, но я не знаю, как бы это сделать ...

1 Ответ

3 голосов
/ 31 января 2012

Вам необходимо создать подкласс WebView и реализовать метод hitTest:. В вашем методе вам необходимо проверить, находится ли мышь в одной из «активных» областей веб-представления, а если нет, вернуть следующий респондент представления в качестве представления, проходящего проверку на попадание.

//assume activeRect is some rect in your view that you want to accept mouse clicks on

- (NSView*)hitTest:(NSPoint)aPoint
{
    if(NSPointInRect([self convertPoint:aPoint fromView:nil], activeRect))
    {
        //if the mouse is in an active area then just perform the default operation
        return [super hitTest:aPoint];
    }
    //otherwise return the next responder
    return (NSView*)[self nextResponder];
}
...