在MouseUp事件中显示NSSharingServicePicker

10

我正在将共享功能添加到我的应用程序中(目标系统为Mavericks,10.9),希望其工作方式如下:

  1. 用户单击共享按钮
  2. 光标更改为十字线
  3. 用户拖动所需共享内容的选择区域
  4. NSSharingServicePicker 显示,允许用户选择要共享的服务

我使用 -mouseDown:-mouseDragged:-mouseUp: 事件来完成此操作。 mouseDown 开始选择,mouseDragged 提供所选区域的反馈,然后 mouseUp 完成拖动并显示选择器。但是每次都会在控制台上写入以下内容:

2014-06-25 00:13:45.111 App[31401:303] Warning: -[NSSharingServicePicker showRelativeToRect: ofView: preferredEdge:] should not be called on mouseUp
Please configure the sender with -[NSControl sendActionOn:NSLeftMouseDownMask];

我不明白为什么会成为一个问题,除非你是在鼠标松开的按钮点击时显示它。我应该忽略这个消息吗?我尝试使用dispatch_asyncdispatch_after来显示它,以尝试在事件调用之外运行它,但它们没有起作用。我想我可以无视它,但那会不会给淘汰的机会?


我也收到了同样的警告。你找到解决方案或者知道为什么在 mouseUp 上显示 NSSharingServicePicker 会有问题吗? - massimobio
@massimobio 不好意思,还没有确定。不过我还没有使用过后来的SDK进行检查。 - Dov
好的,谢谢。我仍然在Xcode 7b6中看到它。我想现在先忽略它。 - massimobio
1个回答

4

我知道已经过去一年了,但是:

我遇到了同样的问题。经过一些研究,我找到了这个答案。在我实现这段代码之前,我的按钮会旋转一段时间,然后返回与你相同的错误。现在当我点击分享按钮时,它不再延迟,并且不会返回任何错误。将以下代码插入到你的应用程序的awakeFromNib方法中:[yourShareButtonName sendActionOn:NSLeftMouseDownMask];

你的代码应该像这样:

- (void)awakeFromNib {
    [yourShareButtonName sendActionOn:NSLeftMouseDownMask];
}

我希望这能对你有所帮助!

yourShareButtonName的位置插入您的分享按钮名称。 - MathematicallyUnsound
谢谢您的尝试,但它不适用于我的情况。我不会在点击按钮后立即显示共享表单,而是要等到他们先拖出选择。此外,您的建议只实现了日志消息已经要求执行的操作。 - Dov
仅供记录,这是针对 Swift 4 的采用方式(也放置在 override func awakeFromNib() 中):yourShareButtonName.sendAction(on: .leftMouseDown) - alexkaessner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接