Можно ли получить NSView для передачи rightMouseDown: следующему респонденту без разделения на подклассы? - PullRequest
2 голосов
/ 03 июня 2010

У меня есть представление, которое содержит несколько подпредставлений:

mainView
    subViewA
    subViewB
    SubViewC

mainView - это NSView, построенный из кончика и управляемый с помощью подкласса NSViewController. Подвиды являются стандартными представлениями, такими как NSTextField и NSImageView, и они настроены как недоступные для редактирования. Я хочу, чтобы mainView получил rightMouseDown:, даже если событие вызвано в одном из подпредставлений.

Реализация по умолчанию rightMouseDown: в NSResponder передает событие следующему респонденту, но NSView изменяет поведение по умолчанию и не передает его следующему респонденту.

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

Как я могу получить подпредставления для передачи rightMouseDown: сообщений следующему респонденту без разделения на подклассы всех подпредставлений?

Ответы [ 3 ]

1 голос
/ 06 июня 2010

Обычно это достигается переопределением метода -hitTest: суперпредставлений?

0 голосов
/ 05 июня 2010

Мое решение - добавить подпредставление к mainView, которое я назвал clickCatcher. clickCatcher является прозрачным и равным по размеру mainView и добавляется таким образом, что это самый верхний вид:

[self addSubview:clickCatcher positioned:NSWindowAbove relativeTo:nil];

Методы XXXmouseDown: clickCatcher call superview.

0 голосов
/ 03 июня 2010

Переопределить NSApplication's - (void) sendEvent:

- (void)sendEvent:(NSEvent *)event {
  if([event type]== NSRightMouseDown)
    redirect to wherever
  else
    [super sendEvent:event];
}
...