如何在右侧 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 代码中获取 Cordova 插件的参考