我想知道是否可以动态创建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
}
}
}
有什么办法可以做吗?
答案 0 :(得分:0)
NSTouchBarItem.Identifier
可以基于任何字符串,包括基于Restaurant
对象的某些标识符的动态字符串。您可以将defaultItemIdentifiers
设置为该动态生成的标识符数组,然后将为每个这些标识符调用touchBar(_:,makeItemForIdentifier:)
(然后可以动态创建一个按钮,或者为每个这些标识符动态创建按钮)。
另一种替代方法是使用NSScrubber
。这可能是触摸栏中的一个项目,但是它具有一个数据源,可用于根据您的餐厅数据源来填充它。