无法启动NSTrackingArea

Tod*_*odd 3 cocoa nstrackingarea swift

NSOutlineView想在拖放过程中拥有mouseEntered:mouseExited:更新它。因此,我尝试在其中添加一个NSTrackingArea。在我的大纲视图子类中,我有:

let target = self.frame
let options = [NSTrackingAreaOptions.enabledDuringMouseDrag]
let area = NSTrackingArea(rect: target, options: options, owner: self, userInfo: nil)
self.addTrackingArea(area)
Run Code Online (Sandbox Code Playgroud)

但是我似乎得到了运行时异常:

[General] trackingArea options 0x400 do not include a type
Run Code Online (Sandbox Code Playgroud)

这一定是很明显的,但是Google的所有搜索结果似乎都不能说明我做错了什么。如果我做:

var trackingID = self.addTrackingRect(target, owner: self, userData: nil, assumeInside: false)
Run Code Online (Sandbox Code Playgroud)

那么鼠标方法会触发,但显然只有在释放鼠标按钮时才会触发。

vad*_*ian 6

文档中

NSTrackingAreaOptions

为的options参数中指定的常数定义的数据类型init(rect:options:owner:userInfo:)。这些常量如下所述;您可以通过对它们执行按位或运算来指定多个常量。特别地,必须提供一个或多个跟踪型常量(即mouseEnteredAndExitedmouseMovedcursorUpdate和有源常数之一(即,activeWhenFirstResponderactiveInKeyWindowactiveInActiveApp,和activeAlways)。此外,您可以指定任何行为常数(即assumeInsideinVisibleRectenabledDuringMouseDrag)。

这意味着需要一个或多个type常数,并且其中一个active常数是必需的。