2015-07-19 3 views
0

Я переопределяю метод NSResponder mouseEntered(theEvent: NSEvent) и хочу получить значение, которое я установил при создании NSTrackingArea в Swift. Я использую конструктор 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 
} 

Мой код основан на этой Objective-C Sample Code предоставленной Apple. Процитируем строки 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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^