使OSX应用程序在未聚焦时响应第一次鼠标单击

时间:2008-09-24 15:55:06

标签: cocoa macos click-through

正常的OSX应用程序在没有聚焦时首先点击鼠标点击应用程序。然后,应用程序将处理未来的点击。 iTunes播放/暂停按钮和Finder的行为有所不同,即使没有聚焦,第一次点击也会被激活。我正在寻找一种方法来强制现有的应用程序(远程桌面连接.app)在第一次点击时起作用而不仅仅是焦点。

3 个答案:

答案 0 :(得分:14)

检查NSView的acceptedFirstMouse,它可能就是你要找的东西。

acceptsFirstMouse: 如果接收器应该发送一个mouseDown:消息用于初始鼠标按下事件,则子类重写返回YES,否则返回NO。

  • (BOOL)acceptedFirstMouse:(NSEvent *)theEvent

参数 事件 最初的鼠标按下事件,必须在其窗口中的接收器上方。

讨论 接收方可以无条件地返回值,也可以使用Event的位置来确定它是否需要该事件。默认实现忽略了Event并返回NO。

在子类中重写此方法以允许实例响应点击。这允许用户单击非活动窗口中的视图,只需单击一下即可激活视图,而不是先单击以使窗口处于活动状态,然后单击视图。大多数视图对象拒绝单击尝试,因此事件只会激活窗口。但是,许多控件对象(例如NSButton和NSSlider的实例)都接受它们,因此用户可以立即操作控件而无需释放鼠标按钮。

答案 1 :(得分:4)

在未聚焦时响应第一次鼠标点击称为“点击”。它的价值受到激烈争论,例如herehere

答案 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];
        }

}