mouseEntered и mouseExited не вызываются в подклассе NSImageView

Вам нужно поместить этот код в конструктор вашего класса:

private Reminders reminder = new Reminders();
private dynamic defaultReminder;

public YourClass()
{
    defaultReminder = reminder.TimeSpanText[TimeSpan.FromMinutes(15)];
}

Причина в том, что вы не можете использовать одну переменную экземпляра для инициализации другой с помощью инициализатора поля, поскольку выполнение порядок инициализаторов полей не определен.

29
задан Justin Boo 25 June 2012 в 14:06
поделиться

4 ответа

Если вы хотите использовать mouseEntered: и mouseExited:, вам нужно использовать NSTrackingArea. Вот ссылка Ссылка класса NSTrackingArea .

Пример:

//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];
}
75
ответ дан Deadpikle 25 June 2012 в 14:06
поделиться

Swift 3 Версия ответа @Justin Boo :

private var trackingArea: NSTrackingArea?

override func updateTrackingAreas() {
    super.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)
}
8
ответ дан Nikolay Suvandzhiev 25 June 2012 в 14:06
поделиться

Версия Swift 4 Ответ Джастина Бу

override func updateTrackingAreas() {
    for trackingArea in self.trackingAreas {
        self.removeTrackingArea(trackingArea)
    }

    let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeAlways]
    let trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
    self.addTrackingArea(trackingArea)
}
6
ответ дан Xenon 25 June 2012 в 14:06
поделиться

C # Xamarin версия ответа Джастина Бу

public override void UpdateTrackingAreas ()
{
    base.UpdateTrackingAreas ();

    foreach (var item in TrackingAreas ()) {
        RemoveTrackingArea (item);
    }

    var options = NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways;

    var trackingArea = new NSTrackingArea (this.Bounds, options, this, null);

    AddTrackingArea (trackingArea);
}
2
ответ дан Dominique 25 June 2012 в 14:06
поделиться