动态NSTouchBar项

时间:2018-08-30 12:23:09

标签: swift appkit nstouchbar

我想知道是否可以动态创建NSTouchBar个项目。在我的应用程序中,我有一个dataSource协议来填充NSTableViewController的内容。我想使用此协议来为touchBar填充相同的选项。

这是我正在使用的协议。

protocol RestaurantsViewControllerDelegate {
    func numberOfRestaurants(in restaurantsViewController: RestaurantsViewController) -> Int
    func restaurantsViewController(_ restaurantsViewController: RestaurantsViewController, restaurantAtIndex index: Int) -> Restaurant
    func restaurantsViewController(_ restaurantsViewController: RestaurantsViewController, didSelectRestaurant restaurant: Restaurant)
}

尽管如此,我发现的唯一代码表明我必须手动创建每个按钮,

@available(OSX 10.12.1, *)
extension NSTouchBarItem.Identifier {
    static let restaurant = NSTouchBarItem.Identifier("my.custom.identifier")
}

extension RestaurantsViewController: NSTouchBarDelegate {
    override func makeTouchBar() -> NSTouchBar? {
        let touchBar = NSTouchBar()
        touchBar.delegate = self
        touchBar.defaultItemIdentifiers = [.restaurant]
        return touchBar
    }

    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? {
        switch identifier {

        case NSTouchBarItem.Identifier.restaurant:
            let item = NSCustomTouchBarItem(identifier: identifier)
            item.view = NSButton(title: "This is a restaurant", target: nil, action: nil)
            return item
        default: return nil
        }
    }
}

有什么办法可以做吗?

1 个答案:

答案 0 :(得分:0)

NSTouchBarItem.Identifier可以基于任何字符串,包括基于Restaurant对象的某些标识符的动态字符串。您可以将defaultItemIdentifiers设置为该动态生成的标识符数组,然后将为每个这些标识符调用touchBar(_:,makeItemForIdentifier:)(然后可以动态创建一个按钮,或者为每个这些标识符动态创建按钮)。

另一种替代方法是使用NSScrubber。这可能是触摸栏中的一个项目,但是它具有一个数据源,可用于根据您的餐厅数据源来填充它。

相关问题