gpt4 book ai didi

swift - 动态更新 NSTouchBar 以编程方式添加/删除项目

转载 作者:搜寻专家 更新时间:2023-10-30 22:29:28 25 4
gpt4 key购买 nike

我目前正在为我的 macOS 应用程序实现 NSTouchBar api。

此刻,我拥有的唯一触摸栏将主视图 Controller 作为其委托(delegate),我可以很好地向其添加项目。问题是,我需要其中一些项目仅在满足特定条件(在表格中选择一行)时出现。

假设我有一个 bool 值,指示按钮是否应该可见。如果我的 bool 值发生变化,我如何即时更新 NSTouchBar 以显示/隐藏此按钮? (我不需要观察这个 bool 值,我可以简单地在我已经实现的另一个方法中调用更新)

我现在所做的是:在 touchBar(:makeItemForIdentifier) 中,我有一个用于所有标识符的开关,在适当的 case 下,我要么返回NSCustomTouchBarItem 和按钮,或者 nil 如果我的 bool 值是 false

我尝试在选择表格的一行后再次调用 makeTouchBar 但它不会更新按钮的可见性,就好像 touchBar(:makeItemForIdentifier) 不是再次调用。

谢谢!

最佳答案

四个想法:

  1. 尝试将触摸栏的 defaultItemIdentifiers 更改为应显示的项目标识符集。请注意,如果用户自定义了触摸栏,这将是有问题的,但我认为按需交换项目和自定义触摸栏无论如何都不能很好地结合在一起。这还有一个好处,就是您不需要在 touchBar(:makeItemForIdentifier:) 中返回 nil。
  2. 调用makeTouchBar() 将创建一个新的NSTouchBar 实例,但不会更改touchBar 属性。尝试类似的东西

    viewController.touchBar = viewController.makeTouchBar()

    viewController.touchBar = nil
    1. NSTableRowView 上设置 touchBar 属性,以便在选择时显示额外的项目,并确保将 otherItemsProxy 包含在你的 defaultItemIdentifiers。由于触摸栏的内容由响应链中的所有元素组成,这可能包括表行的 touchBar 属性(前提是它可以成为第一响应者)。

    2. 您确定在未选择该行时应隐藏这些项目吗?考虑禁用它们(例如,将它们包含的按钮的 enabled 属性设置为 false)。

关于swift - 动态更新 NSTouchBar 以编程方式添加/删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com