我有一个标准的菜单栏应用程序(带有下拉菜单),并希望为我的用户添加能够在我的菜单栏图标上拖动文件的功能(如this)。
你知道这是怎么完成的吗?
我假设我的菜单栏应用程序必须接受拖放操作。但真正让我感到困惑的是弹出视图的动画如此美妙。
任何指针都会非常感激!
答案 0 :(得分:1)
很简单,你应该制作你的按钮。 您需要一个nsview来通过委托类here进行拖放和单击操作以打开菜单,这样可以提供帮助,并为nsview类引用提供此link。
现在您应该将此视图设置为状态按钮:
NSStatusItem *_statusItem;
_statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[_statusItem setView:_buttonview];
答案 1 :(得分:0)
从macOS 10.10开始,Apple不赞成更改NSStatusItem的视图。相反,所有自定义行为都应该通过NSStatusItem的.button(NSStatusBarButton)属性进行。
由于我们不应该更改状态项的视图,并且看起来不可以用自己的实现替换掉NSStatusBarButton,所以没有很多“干净”的方式来添加拖放。
但是,您可以覆盖NSStatusBarButton扩展中的拖放功能,如Swift中所示:
extension NSStatusBarButton {
override open func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
print("entered")
return NSDragOperation()
}
}
请注意,扩展名中的重载为not technically something that should be done in swift,但是在Obj-C中,它是可以接受的。
您还必须在状态栏按钮上注册拖动的类型。
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
statusItem.button?.registerForDraggedTypes([.fileURL])