2011-03-30 27 views
3

如何處理Cocoa中窗口內的mousedown事件?如何處理Cocoa窗口中的mousedown事件

我的代碼:

-(void)mouseDown:(NSEvent *)event { 
    NSLog(@"yay"); 
}  

我使用的是Mac OS10.6,在Xcode 4.0.1。

編輯: 是的,這是在應用程序的委託,但這是我的.h:

@interface jumperAppDelegate:NSWindow {

這是我以前在應用代表鼠標做(只是不事件)。這真的很煩我

+0

除了缺少前導'-'(即' - (void)mouseDown:'),這是正確的。你有什麼問題? – 2011-03-30 21:44:45

+0

它不會工作(對不起,我遺漏了 - 但它在我的代碼中)。 – 2011-03-30 21:47:45

+0

您確定要將此代碼添加到NSWindow實現嗎?也許你將它添加到應用程序委託或類似的東西? – 2011-03-30 22:10:07

回答

6

務必從NSWindow繼承,以及符合<NSWindowDelegate>協議。像這樣:

@interface YourWindow : NSWindow <NSWindowDelegate> {} 
@end 

然後您應該收到事件通知。

-(void)mouseDown:(NSEvent *)event {  
} 
+0

其實,我不確定是否符合'NSWindowDelegate'是必要的。無論如何,請給它一個鏡頭。 – 2011-03-31 00:49:48

+0

那還不行,這很奇怪。我已經繼承了NSWindow,並且我做了NSWindowDelegate,這沒有任何幫助。我不知道發生了什麼 – 2011-03-31 05:17:32

+0

@Conor:你確定你沒有一個窗口/視圖超出了你想要註冊mouseDown事件的窗口/視圖嗎?也許它吸收了通知。另外,試着做一些sosborn說的話,即在'accepFirstResponder'上返回YES。 – 2011-03-31 13:39:59

0

我不確定,但我聽說你的頭文件(.h)中需要用「NSWindow」替換「NSObject」。我會測試它,但我現在不在我的電腦。

此外,請確保您把下面的代碼到你的頭文件:

- (void) mouseDown:(NSEvent*)event; 

編輯:我做了一些試驗和研究,但我不能得到它的工作。儘管我有兩個提示。

  • 使用'-acceptsFirstMouse方法。

  • 嘗試創建一個NSEvent:

    NSEvent * someEvent; - (void)mouseDown:(NSEvent *)someEvent;

這可能不會工作,但我會tomarrow

+0

不需要將它放在頭文件中。這是一個通知,所以編譯器不需要看到頭部聲明。 – 2011-03-31 00:33:45

2

更多信息對於這種方法被稱爲它被稱爲需要從NSResponder類繼承的類。 Windows和視圖都是NSResponder的子類。如果您正在調用此類的類不是NSResponder的子類,則該方法不會觸發。

*更新* 另外一定要覆蓋accepFirstResponder返回yes。

- (BOOL)acceptsFirstResponder { 
    return YES; 
} 
相關問題