Cocoa 如何检查机器是否有触摸条

Cocoa 如何检查机器是否有触摸条,cocoa,appkit,nstouchbar,Cocoa,Appkit,Nstouchbar,是否有API来检查正在运行的机器是否有触摸栏(或Xcode的触摸栏模拟器) 我有一些方法只有在触摸栏存在时才能调用。如果我只是检查响应程序的touchBar属性的可空性,它会自动创建一个touchBar实例,即使机器不支持它。但我不想在没有意义的时候创建一个 您的应用程序不需要也不需要API来知道是否有可用的触摸栏。无论您的应用程序是否在支持触摸栏的机器上运行,您的应用程序的屏幕用户界面(UI)都会以相同的方式显示和运行 因此,苹果显然认为触摸栏是一种额外的用户界面,它可以复制其他地方可用的功能

是否有API来检查正在运行的机器是否有触摸栏(或Xcode的触摸栏模拟器)

我有一些方法只有在触摸栏存在时才能调用。如果我只是检查响应程序的
touchBar
属性的可空性,它会自动创建一个touchBar实例,即使机器不支持它。但我不想在没有意义的时候创建一个

您的应用程序不需要也不需要API来知道是否有可用的触摸栏。无论您的应用程序是否在支持触摸栏的机器上运行,您的应用程序的屏幕用户界面(UI)都会以相同的方式显示和运行

因此,苹果显然认为触摸栏是一种额外的用户界面,它可以复制其他地方可用的功能,因此你的应用不需要知道它是否存在

因此,您的问题的答案是没有用于此目的的公共API

(我怀疑你可以找出它-考虑代表调用,事件生成等)-不调用任何私人UI或依赖于机器ID,但我不知道你可以。< / P> 嗯

复制其他地方可用的功能

就苹果而言,这似乎非常愚蠢。假设您有一个音频/视频应用程序,该应用程序具有用于某些内容的洗涤器栏功能。如果没有触摸栏,控件位于屏幕上的主窗口中。有一个触摸栏,它就在那里。那么,这是否意味着苹果希望这样一款应用同时在这两个地方拥有这样的控制权

我能看到他们允许应用程序实现这种功能的唯一“缺点”是,使用触摸屏mac的人很难(呃)向没有触摸屏的人解释如何使用该应用程序(反之亦然)

我可以看出(也许)他们不希望应用程序必须具有只在触摸栏上可用而其他方式不可用的功能。但这让我觉得有点像对iPhone/iPad应用程序的开发人员说,应用程序不需要知道它在哪个设备上运行。这就是他们添加自适应布局和特性的全部原因,对吗?“触摸栏/无触摸栏”不是一回事吗


这可能是他们“Touchbar API 2.0列表”中最重要的东西之一,但他们知道,如果现在允许,很可能会有人滥用它。(有人制作了一个应用程序,它在有或没有工具栏的情况下表现完全不同,因此,试图解释和/或弄明白它会变得一团糟,或者TB功能会变成一种“被忽略的继子女界面”,而不是经过深思熟虑的东西。)

此功能检查系统是否是带有TouchBar的MacBook Pro(“MacBookPro13,2”和“MacBookPro13,3”)。如果苹果将来发布其他带有触摸栏的设备,您必须更新该功能

func touchbarAvailable() -> Bool {
    var size = 0
    sysctlbyname("hw.model", nil, &size, nil, 0)
    var machine = [CChar](repeating: 0,  count: Int(size))
    sysctlbyname("hw.model", &machine, &size, nil, 0)

    if (String(cString: machine) == "MacBookPro13,2" || String(cString: machine) == "MacBookPro13,3") {
        return true
    }
    return false
}

啊哈,在委托调用或
makeTouchBar()中添加一个标志
是一个好主意。我错过了苹果在参考资料中提到的。谢谢……不幸的是,它可能很有用,至少对于调试目的来说是如此,因为触摸栏的存在会触发应用程序工具包中的特定行为,如果处理不当,可能会导致非常特定的错误和崩溃(问我怎么知道…)这不是一个很好的方法,因为当他们发布支持TouchBar的新型号时,你的应用程序不会显示在他们身上。作为一个普通的检查,这是没有用的。我使用MBP时,TouchBar连接了外部键盘、鼠标和显示器。TouchBar离我的手很远,在正常情况下,我不使用它如果一个应用程序隐藏了正常情况下可用的屏幕控件,我会觉得很烦人,因为我的MBP在技术上确实有一个触摸栏。我想苹果在考虑这种情况。