我是Mac编程的新手,我想在光标进入或退出主窗口时触发事件.我读了一些关于NSTrackingArea的内容,但我不明白该怎么做.
Mat*_*ner 15
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.
}
Run Code Online (Sandbox Code Playgroud)
您还应该实现NSView的updateTrackingAreas方法并测试事件的跟踪区域以确保它是正确的.
Matt Bierner的回答真的帮助了我; 需要实现-viewWillMoveToWindow:方法.
我还要补充一点,如果要在调整视图大小时处理跟踪区域,还需要实现此操作:
- (void)updateTrackingAreas
{
// remove out-of-date tracking areas and add recomputed ones..
}
Run Code Online (Sandbox Code Playgroud)
在自定义子类中,处理视图的变化几何; 这将自动为您调用.