Я создал подкласс NSImageView
для захвата mouseEntered
и mouseExited
событий. Но только mouseUp
и mouseDown
события набираются. Как записать mouseEntered
и mouseExited
события в NSImageView
подкласс?mouseEntered и mouseExited не вызываются в NSImageView SubClass
27
A
ответ
69
Если вы хотите использовать mouseEntered:
и mouseExited:
Вам необходимо использовать NSTrackingArea
. Вот ссылка NSTrackingArea Class Reference.
Пример:
//Add this to Your imageView subclass
-(void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"Mouse entered");
}
-(void)mouseExited:(NSEvent *)theEvent
{
NSLog(@"Mouse exited");
}
-(void)updateTrackingAreas
{
[super updateTrackingAreas];
if(trackingArea != nil) {
[self removeTrackingArea:trackingArea];
[trackingArea release];
}
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds]
options:opts
owner:self
userInfo:nil];
[self addTrackingArea:trackingArea];
}
5
Swift 3 версию ответа @Justin Boo «s:
private var trackingArea: NSTrackingArea?
override func updateTrackingAreas() {
if let trackingArea = self.trackingArea {
self.removeTrackingArea(trackingArea)
}
let options: NSTrackingAreaOptions = [.mouseEnteredAndExited, .activeAlways]
let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
self.addTrackingArea(trackingArea)
}
Просто еще один "почему я должен иметь дело с этим дерьмом" момент с API для Apple. – ArtOfWarfare
@ArtOfWarfare Или это реальность наличия сложной иерархии представлений и нежелание вызывать потенциально сотни тысяч методов, когда пользователь просто перемещает указатель на кусок пользовательского интерфейса. Это возрастной возраст ** Никогда не проводите опрос, всегда тяните. ** – bbum
Бинго, работает как шарм – Pete