Objective c 如何以编程方式终止NSDragingSession? 背景: 在Cocoa/ObjC中实现的OS-X应用程序 Xcode 6.1 基本SDK:10.0 部署目标:10.8+ 问题:

Objective c 如何以编程方式终止NSDragingSession? 背景: 在Cocoa/ObjC中实现的OS-X应用程序 Xcode 6.1 基本SDK:10.0 部署目标:10.8+ 问题:,objective-c,macos,cocoa,appkit,Objective C,Macos,Cocoa,Appkit,在我的应用程序中,我有一个自定义的NSView子类,它实现了NSDraggingSource。我正在使用新的基于NSDraggingSession的API(而不是旧的弃用API) 我已经完全实现了我的拖动源代码,没有问题 我已经在实施: -[NSDraggingSource draggingSession:movedToPoint:] 我还想在此方法中执行一些命中检测,并根据命中测试的结果,可能以编程方式取消当前的拖动会话 那么:以编程方式取消/终止当前的NSDraggingSession的最

在我的应用程序中,我有一个自定义的
NSView
子类,它实现了
NSDraggingSource
。我正在使用新的基于
NSDraggingSession
的API(而不是旧的弃用API)

我已经完全实现了我的拖动源代码,没有问题

我已经在实施:

-[NSDraggingSource draggingSession:movedToPoint:]
我还想在此方法中执行一些命中检测,并根据命中测试的结果,可能以编程方式取消当前的拖动会话

那么:以编程方式取消/终止当前的
NSDraggingSession
的最佳方式是什么?
(最好从
-[NSDraggingSource draggingSession:movedToPoint:

也可以在终止时指定
nsdragooperation

笔记:
  • 我尝试在自定义视图上调用
    -[NSResponder cancelOperation:
    ,认为这可能与拖动会话有关,但不起作用。我得到了一个异常,无法识别的选择器

  • 我不需要帮助进行命中检测

  • 一般来说,我不需要帮助实现
    NSDraggingSource


Hmmmm,当用户抬起鼠标按钮时,拖动会话通常结束。通过编程,你可以向他展示一幅可怕的图像,这样用户就可以松开鼠标按钮,将手放在眼前。但是如何以编程方式释放按钮呢?当拖动会话结束时,仍然按下鼠标按钮会发生什么?是的,在发布了这个问题后,我终于明白苹果可能不希望你以编程方式终止拖动会话,因为这可能会让没有释放鼠标按钮的用户感到困惑。不管怎样,我想我还是把这个问题留在这里……它可能在某种程度上被证明是有用的,即使它只是为了解释这不可能通过公共API实现。