2011-04-23 54 views
0

我正在嘗試獲取相對於nsview的鼠標位置。從自定義nsview中獲取鼠標位置

至少有兩種方法,我知道的:

NSPoint mousePosition = [self.window convertScreenToBase:[NSEvent mouseLocation]]; 

而且

NSPoint mousePosition = [self.window mouseLocationOutsideOfEventStream]; 

兩者的這些方法的問題是,self.view爲空。我從視圖控制器添加了此視圖,該視圖控制器本身是由另一個視圖控制器添加的。我想知道是否有可能從低於許多級別的nsview開始獲取頂級窗口。

編輯:當然,我可以使用:

NSWindow *window = [self valueForKeyPath:@"delegate.delegate.view.window"]; 

但是,必須有一個更好的辦法。

+0

我不知道我明白你爲什麼說「self.view爲空」(一個不存在的觀點不能被添加到一個窗口),你這是什麼意思頂部級別窗口(一個視圖屬於一個窗口)。 – 2011-04-23 13:51:54

回答

1

我想知道是否有可能從nsview開始,可以在下面的許多級別的頂級窗口。

肯定的:

NSView *view = …; 
NSWindow *window = [view window]; 
+0

由於某些不適合我的原因,[查看窗口]爲空。 – 2011-04-23 20:06:15

+0

你會說'self.view爲空'。 'self'是「NSViewController」的一個子類嗎?你在'-loadView'中編程創建視圖,還是從nib文件加載?如果你從一個nib文件加載它,你確定你已經設置了'view'插座嗎? – 2011-04-23 21:51:36

+0

[視圖窗口]爲空,視圖被正確設置。我通過使用一些代表解決了問題。 – 2011-04-24 19:09:56