正常的 OSX 应用程序在未聚焦时会首先单击鼠标以首先聚焦应用程序。然后应用程序处理未来的点击。iTunes 播放/暂停按钮和 Finder 的行为不同,即使没有聚焦,第一次点击也会起作用。我正在寻找一种方法来强制现有应用程序(远程桌面连接.app)在第一次点击时采取行动,而不仅仅是关注。
问问题
4960 次
3 回答
14
检查 NSView 的acceptsFirstMouse,它可能就是你要找的。
接受FirstMouse:如果应该向接收者发送mouseDown:初始鼠标按下事件的消息,则由子类覆盖以返回YES,否则返回NO。
- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
参数 theEvent 初始鼠标按下事件,它必须在其窗口中的接收器上方。
讨论 接收者可以无条件地返回一个值,也可以使用事件的位置来确定它是否需要该事件。默认实现忽略 theEvent 并返回 NO。
在子类中重写此方法以允许实例响应点击。这允许用户单击非活动窗口中的视图,只需单击即可激活视图,而不是先单击以使窗口处于活动状态,然后再单击视图。大多数视图对象拒绝点击尝试,因此事件只是激活窗口。然而,许多控件对象(例如 NSButton 和 NSSlider 的实例)确实接受它们,因此用户可以立即操作控件而无需释放鼠标按钮。
于 2008-09-24T19:01:09.703 回答
0
// 假设你有 1 个一直挂着的视图控制器。超越加载视图。注意这在优胜美地之前是行不通的。
- (void)loadView {
NSLog(@"loadView");
self.view = [[NSView alloc] initWithFrame:
[[app.window contentView] frame]];
[self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways);
trackingArea0 = [[NSTrackingArea alloc] initWithRect:self.view.bounds
options:opts
owner:self
userInfo:nil];
[self.view addTrackingArea:trackingArea0];
}
- (void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"entered");
if ([[NSApplication sharedApplication] respondsToSelector:@selector(activateIgnoringOtherApps:)]) {
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
}
于 2015-02-07T01:03:00.303 回答