如何使用NSTrackingArea

时间:2011-01-09 13:32:43

标签: cocoa macos

我是Mac编程的新手,我想在光标进入或退出主窗口时触发事件。我读了一些关于NSTrackingArea的内容,但我不明白该怎么做。

2 个答案:

答案 0 :(得分:14)

Apple为NSTrackingAreas提供了文档和示例。

跟踪鼠标何时进入或存在窗口的最简单方法是在窗口的contentView中设置跟踪区域。但是,这不会跟踪窗口的工具栏

就像一个简单的例子,在自定义内容视图的代码中:

- (void) viewWillMoveToWindow:(NSWindow *)newWindow {
    // Setup a new tracking area when the view is added to the window.
    NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
}

- (void) mouseEntered:(NSEvent*)theEvent {
    // Mouse entered tracking area.
}

- (void) mouseExited:(NSEvent*)theEvent {
    // Mouse exited tracking area.
}

您还应该实现NSView的 updateTrackingAreas 方法并测试事件的跟踪区域以确保它是正确的。

答案 1 :(得分:5)

Matt Bierner回答真的帮助了我;需要实施-viewWillMoveToWindow:方法。

我还想补充一点,如果你想在调整视图大小时处理跟踪区域,你还需要实现这个:

- (void)updateTrackingAreas
{
   // remove out-of-date tracking areas and add recomputed ones..
}
自定义子类中的

,用于处理视图的变化几何;这将自动为您调用。