将按钮添加到NSTouchBar控制条

问题描述 投票:1回答:1

我正在开展一个宠物项目,它在触摸栏上显示当前的加密货币价格。我是一名Web开发人员,但不是Swift开发人员,所以它很慢。

https://github.com/sharkattackhq/crypt

现在,基本功能已经到位,但当然只有在应用程序窗口处于活动状态时才会显示数据。无论哪个应用程序处于活动状态,我都希望能够查看数据,我能看到的唯一方法就是在Touch Bar的Control Strip部分添加一个按钮。

如何在控制条上添加按钮?这没有公共API,但我可以看到其他的,没有Apple应用程序。

swift xcode swift4 nstouchbar macbookpro-touch-bar
1个回答
6
投票

只有通过私有API,您才需要连接/System/Library/PrivateFrameworks/DFRFoundation.framework

桥:

// TouchBarPrivateApi-Bridging.h
#import "TouchBarPrivateApi.h"`

标题:

// TouchBarPrivateApi.
#import <AppKit/AppKit.h>`
extern void DFRElementSetControlStripPresenceForIdentifier(NSTouchBarItemIdentifier, BOOL);
    extern void DFRSystemModalShowsCloseBoxWhenFrontMost(BOOL);

    @interface NSTouchBarItem (PrivateMethods)
    + (void)addSystemTrayItem:(NSTouchBarItem *)item;
    + (void)removeSystemTrayItem:(NSTouchBarItem *)item;
    @end


    @interface NSTouchBar (PrivateMethods)
    + (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
    + (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
    + (void)dismissSystemModalFunctionBar:(NSTouchBar *)touchBar;
    + (void)minimizeSystemModalFunctionBar:(NSTouchBar *)touchBar;
    @end

并使用它:

// AppDelegate applicationDidFinishLaunching
func applicationDidFinishLaunching(_ aNotification: Notification) {
    TouchBarController.shared.setupControlStripPresence()
}

// TouchBarController class TouchBarController: NSObject, NSTouchBarDelegate {

    static let shared = TouchBarController()

    let touchBar = NSTouchBar() func setupControlStripPresence() {
        DFRSystemModalShowsCloseBoxWhenFrontMost(false)
        let item = NSCustomTouchBarItem(identifier: .controlStripItem)
        item.view = NSButton(image: #imageLiteral(resourceName: "Strip"), target: self, action: #selector(presentTouchBar))
        NSTouchBarItem.addSystemTrayItem(item)
        DFRElementSetControlStripPresenceForIdentifier(.controlStripItem, true)
    }

更新10.14

+ (void)presentSystemModalTouchBar:(NSTouchBar *)touchBar placement:(long long)placement systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
+ (void)presentSystemModalTouchBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSTouchBarItemIdentifier)identifier;
+ (void)dismissSystemModalTouchBar:(NSTouchBar *)touchBar;
+ (void)minimizeSystemModalTouchBar:(NSTouchBar *)touchBar;

以真实的项目为例 - https://github.com/Toxblh/MTMR

© www.soinside.com 2019 - 2024. All rights reserved.