Как заставить прозрачный подкласс NSView обработать события от нажатия мыши?

Ваши атрибуты данных toggle и target неверны.

data-toggle="collapse" data-target="#hanshuber"

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet"/>

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Storyfactory</a>
  <button class="navbar-toggler collapsed bg-primary" type="button" data-toggle="collapse" data-target="#hanshuber" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="hanshuber">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item">
        <a class="nav-link" href="/">Home</a>
      </li>
    </ul>
    <a href="/user/2" class="mr-3"><i class="fas fa-user"></i></a>
    <a href="#"><i class="fas fa-sign-out-alt"></i></a>
    </div>
</nav>

12
задан Chris Hanson 21 January 2009 в 23:36
поделиться

4 ответа

Насколько я знаю, нажмите события к прозрачным частям окон, не поставляются Вашему приложению вообще, таким образом, ни одно из нормальных цепочечных событием переопределений (т.е.-hitTest:-sendEvent: и т.д.), будет работать. Единственным путем я могу думать, первое, что пришло на ум должен использовать Кварцевые Касания События, чтобы получить все щелчки мышью и затем выяснить, ли они по прозрачной области Вашего окна вручную. Это, откровенно говоря, походит на огромный ЛАВАШ для не много усиления.

6
ответ дан 26 October 2019 в 10:47
поделиться

Вы пытались переопределить

- (NSView *)hitTest:(NSPoint)aPoint 

в Вашем подклассе NSView?

1
ответ дан 26 October 2019 в 10:47
поделиться

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

Согласно документации NSView, hitTest метод или возвратит NSView, на который пользователь нажал, или nil если точка не в NSView. В этом случае я вызвал бы [super hitTest:], и затем возвратите текущее представление, только если результат иначе был бы nil (на всякий случай Ваше пользовательское представление содержит подпредставления).

- (NSView *)hitTest:(NSPoint)aPoint
{
    NSView * clickedView = [super hitTest:aPoint];
    if (clickedView == nil)
    {
        clickedView = self;
    }

    return clickedView;
}
0
ответ дан 26 October 2019 в 10:47
поделиться

Джордж: вы упомянули, что пытались заполнить части почти прозрачным, но не совсем прозрачным цветом. В моем тестировании это работает, только если значение альфа выше 0,05, так что вам может повезти с чем-то вроде этого:

[[NSColor colorWithCalibratedRed:0.01 green:0.01 blue:0.01 alpha:0.05] set];

Это уродливая кладжа, но она может работать достаточно хорошо, чтобы избежать использования касания события.

2
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: