Macos 将子视图添加到窗口中的视图时,将重置自定义NSCursor

Macos 将子视图添加到窗口中的视图时,将重置自定义NSCursor,macos,cocoa,nsview,appkit,nscursor,Macos,Cocoa,Nsview,Appkit,Nscursor,我正在使用NSTrackingArea在NSView子类中定义两个区域。然后我使用mouseEntered/mouseExited将光标更改为自定义光标 因此,当鼠标进入顶部跟踪区域并按预期设置自定义光标时,一切正常。当我向下移动并拖动顶部跟踪区域时,一切仍然良好。但我有另一个UI部分,当鼠标被拖动时会更新,它会将子视图添加到同一窗口中其他位置的视图中 一旦第一个子视图添加到其他位置,我的自定义光标就会消失,并恢复为箭头光标。我想我可以使用cursorUpdate将光标强制返回到自定义视图,但由

我正在使用
NSTrackingArea
NSView
子类中定义两个区域。然后我使用mouseEntered/mouseExited将光标更改为自定义光标

因此,当鼠标进入顶部跟踪区域并按预期设置自定义光标时,一切正常。当我向下移动并拖动顶部跟踪区域时,一切仍然良好。但我有另一个UI部分,当鼠标被拖动时会更新,它会将子视图添加到同一窗口中其他位置的视图中

一旦第一个子视图添加到其他位置,我的自定义光标就会消失,并恢复为箭头光标。我想我可以使用
cursorUpdate
将光标强制返回到自定义视图,但由于某些原因,它从未被调用,即使在
NSTrackingArea
中设置为选项时也是如此


我有点被这个问题难住了…

我通过在窗口的自定义内容视图中覆盖
游标更新
解决了这个问题。一个空的
cursorUpdate
方法阻止了更新被传递到链的上游,自定义游标现在保持我设置的状态。

Cocoa事件处理指南“与任何其他类型的NSTrackingArea对象一样,当关联视图的位置或大小发生更改时,您可能偶尔需要重新计算并重新创建用于光标更新的跟踪区域对象。有关详细信息,请参阅“管理跟踪区域对象”。“您考虑过这一点吗?在这个例子中,跟踪区域仍然有效,视图没有改变位置或大小。已添加我的解决方案作为答案。为了安全起见,如果您的窗口可调整大小,则应检查当光标位于边缘时,它是否仍显示调整大小光标。我不知道您的解决方案是否会破坏它,但值得检查。谢谢Ken。我没有说自定义光标仅在用户处于特定模式时设置,该模式具有匹配的布尔值。在cursorUpdate中,如果它们不在此模式下,则调用[super cursorUpdate]。