2015-07-19 47 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 
} 
相关问题