2015-07-19 52 views
0

我重寫了NSResponder的mouseEntered(theEvent: NSEvent)方法,並希望檢索在Swift中創建NSTrackingArea時設置的值。我正在使用this構造函數創建NSTrackingArea並將下列對象作爲userInfo傳遞。UnsafeMutablePointer <Void> to [NSObject:AnyObject]

let trackerData = ["myTrackerKey": view] 
let trackingArea = NSTrackingArea(rect: trackingRect, options: [.EnabledDuringMouseDrag, .MouseEnteredAndExited, .ActiveInActiveApp], owner: self, userInfo: trackerData) 

view : NSView以及trackingRect : NSRect確實存在)

我設置trackerData作爲userInfo,所以我可以在以後mouseEntered(theEvent: NSEvent)讀它。

override func mouseEntered(theEvent: NSEvent) { 
    // This does not work 
    let data1 = theEvent.userData as [NSObject : AnyObject] 
    let data2 = theEvent.userData as [String : NSView] 
    let data3 = theEvent.userData as NSDictionary 
} 

我的代碼基於Apple提供的Objective-C Sample Code。引述線372 SuggestionsWindowController.m的:

HighlightingView *view = [(NSDictionary*)[event userData] objectForKey: kTrackerKey]; 

那麼,怎樣才能我讀了事件的userData?我看過this StackOverflow Q&A,但它不起作用。

enter image description here

回答

1

如果你想從事件看trackerData,你必須讓從跟蹤區域內的用戶信息

if let userInfo = theEvent.trackingArea?.userInfo { 
    let trackerData = userInfo["myTrackerKey"]! as! NSView 
    // do something with the view 
} 
相關問題