如何在右侧 Touch Bar 的控制中心获取项目?

Posted

技术标签:

【中文标题】如何在右侧 Touch Bar 的控制中心获取项目?【英文标题】:How get an item in control center of Touch Bar on the right? 【发布时间】:2016-12-01 20:55:05 【问题描述】:

应用 TouchSwitcher 在 lightscreen 和 volume 项目旁边添加项目: https://hazeover.com/touchswitcher.html

有没有办法在触摸栏右侧区域的控制条中显示一个项目?

我在官方文档中找不到任何帮助... 请帮帮我!

【问题讨论】:

来自 NSTouchBar 文档:“在触控栏的右侧,系统提供始终可用的控制条。控制条使用户可以访问显示亮度、音量、 Siri 等。您的应用程序栏出现在控制条的左侧。(用户可以选择隐藏控制条,这使最前面的应用程序具有整个触控栏宽度。)“这意味着您的应用程序条总是出现左侧和右侧的项目是不可能的。您甚至无法访问控制条栏项目。 【参考方案1】:

反编译后,我发现在/System/Library/PrivateFrameworks下的一个名为DFRFoundation的框架中有一些API,以及一个相关的方法DFRElementSetControlStripPresenceForIdentifier。我觉得很难再进一步,所以我在这里回答只是为了让您知道用于此的 API 位于私有框架中。希望有一天有人会揭露这些秘密。

【讨论】:

【参考方案2】:

这里是what I use。将NSView 和您选择的标识符传递给controlStrippify() 函数。我尝试使用 Swift 做完全相同的事情导致崩溃,欢迎移植 :)。灵感来自https://github.com/a2/touch-baer。

@import Cocoa;
@import Foundation;

// See: https://github.com/a2/touch-baer
extern void DFRElementSetControlStripPresenceForIdentifier(NSString *string, BOOL enabled);

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

@interface NSTouchBar ()
+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSString *)identifier;
@end

void controlStrippify(NSView *view, NSString *identifier) 
  if (@available(macOS 10.12.2, *)) 
    NSCustomTouchBarItem *touchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
    touchBarItem.view = view;
    [NSTouchBarItem addSystemTrayItem:touchBarItem];
    DFRElementSetControlStripPresenceForIdentifier(identifier, YES);
   else 
    // Fail!
  

【讨论】:

DFRSystemModalShowsCloseBoxWhenFrontMost 做什么?无论提供的布尔值或整行是否存在,它似乎都不会产生任何影响 你是对的@ReDetection,代码更新为不再使用它。

以上是关于如何在右侧 Touch Bar 的控制中心获取项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Storyboard 的 Touch Bar 中添加滚动视图?

从控制器将变量应用于视图中的按钮?Sencha Touch

如何在sencha touch 2中获取当前活动的轮播项目

如何在 Sencha Touch 代码中获取 Cordova 插件的参考

NSPredicateEditorRowTemplate:如何填充右侧弹出窗口

我正在使用通知服务扩展,但无法在通知中获取图像,如何在通知中心获取图像?