2008-09-24 22 views
11

正常OSX應用程序在未聚焦時首先進行鼠標單擊以首先聚焦應用程序。然後將來的點擊由應用程序處理。 iTunes播放/暫停按鈕和Finder的行爲不同,即使未聚焦,第一次點擊也會起作用。我正在尋找一種方法來強制現有的應用程序(遠程桌面連接。應用程序)採取行動的第一次點擊,而不僅僅是專注。使OSX應用程序在未聚焦時響應第一次鼠標單擊

+0

你的例子不完全正確。 iTunes只在幾個地方支持點擊,比如窗口處於迷你模式。 – benzado 2008-10-02 22:13:00

回答

4

響應第一次未聚焦時的鼠標點擊稱爲「點擊」。其價值正在激烈辯論,例如herehere

14

檢查NSView的accepFirstMouse,它可能是你要找的。

acceptFirstMouse: 如果接收方應該發送一個mouseDown:消息,如果沒有,則由子類重寫以返回YES。

  • (BOOL)acceptsFirstMouse:(NSEvent *)theEvent

參數 theEvent 初始鼠標按下事件,它必須是在在其窗口中的接收器。

討論 接收者可以無條件地返回一個值,也可以使用event的位置來確定是否需要該事件。默認實現忽略該事件並返回NO。

在子類中重寫此方法以允許實例響應點進。這允許用戶單擊非活動窗口中的視圖,只需單擊一下即可激活視圖,而不是先單擊以使窗口處於活動狀態,然後單擊該視圖。大多數視圖對象拒絕點擊嘗試,所以事件只是激活窗口。但是,許多控件對象(例如NSButton和NSSlider實例)都接受它們,因此用戶可以立即操作控件而不必釋放鼠標按鈕。

0

//假設您有1個視圖控制器總是處於懸停狀態。超過載入視圖。注:這不會在pre-yosemite工作。

- (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]; 
     } 

} 
+0

這是一個非常坦率的無望解決方案。 – 2015-04-14 01:07:14

相關問題