正常的OSX应用程序在没有聚焦时首先点击鼠标点击应用程序。然后,应用程序将处理未来的点击。 iTunes播放/暂停按钮和Finder的行为有所不同,即使没有聚焦,第一次点击也会被激活。我正在寻找一种方法来强制现有的应用程序(远程桌面连接.app)在第一次点击时起作用而不仅仅是焦点。
答案 0 :(得分:14)
检查NSView的acceptedFirstMouse,它可能就是你要找的东西。
acceptsFirstMouse: 如果接收器应该发送一个mouseDown:消息用于初始鼠标按下事件,则子类重写返回YES,否则返回NO。
参数 事件 最初的鼠标按下事件,必须在其窗口中的接收器上方。
讨论 接收方可以无条件地返回值,也可以使用Event的位置来确定它是否需要该事件。默认实现忽略了Event并返回NO。
在子类中重写此方法以允许实例响应点击。这允许用户单击非活动窗口中的视图,只需单击一下即可激活视图,而不是先单击以使窗口处于活动状态,然后单击视图。大多数视图对象拒绝单击尝试,因此事件只会激活窗口。但是,许多控件对象(例如NSButton和NSSlider的实例)都接受它们,因此用户可以立即操作控件而无需释放鼠标按钮。
答案 1 :(得分:4)
答案 2 :(得分:0)
//假设您有一个始终闲置的视图控制器。骑过负载视图。注:这不适用于优胜美地之前。
- (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];
}
}