Улавливание mouseDown событиями подпредставлений. (Cocoa osx) - PullRequest
4 голосов
/ 30 января 2010

У меня есть серия вложенных представлений, и мне нужно поймать событие mouseDown и сделать то же самое, когда выбрано любое из этих представлений. Есть ли способ сказать суперпредставлению для обработки событий для его подпредставлений? Это лучший способ справиться с этим, чтобы поместить прозрачное представление поверх всех других моих представлений и иметь это представление для обработки событий?

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

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

- (NSView *)hitTest:(NSPoint)aPoint
{
    return NSPointInRect(aPoint, self.frame) ? self : nil;
}

Обратите внимание, что aPoint находится в системе координат фрейма суперпредставления, а не в ее границах.

2 голосов
/ 02 февраля 2010

Определяют ли ваши подпредставления свои mouseDown:?

Если они еще не определили свои собственные -[… mouseDown:(id)event], то они уже должны передавать свои события в цепочку респондента, которая должна попасть в ваше супервизор.

В противном случае (в дополнение к любой другой обработке, которую им нужно сделать) им необходимо решить, какие события суперпредставление также должно получить, и вызвать [super mouseDown:event] для этих событий.

0 голосов
/ 26 ноября 2012

Эта версия работает для преобразования точки, выраженной в экранных координатах:

NSPointInRect([view convertPoint:[[view window] convertScreenToBase:point] fromView:nil], [view bounds]);
...