Приложение OS X Menubar с перетаскиванием
У меня есть стандартное приложение menubar (с выпадающим меню), и я хотел бы добавить возможность пользователям перетаскивать файлы поверх иконки menubar (например, так).
Вы знаете, как это достигается?
Я предполагаю, что мое приложение menubar должно принимать перетаскивание. Но что меня действительно смущает, так это то, как всплывающее представление анимировано так красиво.
Любые указатели будут высоко оценены!
1 ответ
Это просто, вы должны сделать свою кнопку. Вам нужен nsview, чтобы сделать действие перетаскивания и щелчка для открытия меню по классу делегата. Вот пример, который может помочь, и эта ссылка для ссылки на класс nsview.
Теперь вы должны установить этот вид на кнопку состояния:
NSStatusItem *_statusItem;
_statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[_statusItem setView:_buttonview];
Начиная с macOS 10.10, Apple не одобряла изменение представления NSStatusItem. Вместо этого все пользовательское поведение должно проходить через свойство.button (NSStatusBarButton) объекта NSStatusItem.
Поскольку мы не должны изменять вид элемента состояния, и не похоже, что вы можете заменить NSStatusBarButton собственной реализацией, для "чистых" способов добавления перетаскивания не так уж много.
Однако вы можете переопределить функцию перетаскивания в расширении NSStatusBarButton, как показано в Swift:
extension NSStatusBarButton {
override open func draggingEntered(_ sender: NSDraggingInfo) -> NSDragOperation {
print("entered")
return NSDragOperation()
}
}
Обратите внимание, что переопределение в расширениях технически не то, что должно быть сделано в swift, но в Obj-C это может быть приемлемо.
Вам также придется зарегистрироваться для перетаскиваемых типов на кнопке строки состояния.
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
statusItem.button?.registerForDraggedTypes([.fileURL])