gpt4 book ai didi

ios - NSScrollView 中的 NSPopoverTouchBarItems (NSTouchBar)

转载 作者:行者123 更新时间:2023-12-03 16:21:08 24 4
gpt4 key购买 nike

有没有办法将 NSPopoverTouchBarItems 数组添加到 NSScrollView 中?

目前,我的 View 层次结构类似于以下列表。

  • NSTouchBar
    • NSCustomTouchBarItem
      • NSScrollView
        • NSStackView
          • NSButton 数组

上述层次结构输出以下屏幕截图。

enter image description here

总之,最终目标是用 NSPopoverTouchBarItems 替换 NSButtons 数组。

最佳答案

我相信您需要的是使用 NSScrubber 来滚动或固定多个按钮的位置,包括 NSPopoverTouchBarItem

https://developer.apple.com/documentation/appkit/nsscrubber

查看此存储库以获取可能对您有帮助的更多信息和示例代码:

https://github.com/loretoparisi/touchbar

import Cocoa

fileprivate extension NSTouchBar.CustomizationIdentifier {
static let popoverBar = NSTouchBar.CustomizationIdentifier("com.TouchBarCatalog.popoverBar")
}

fileprivate extension NSTouchBarItem.Identifier {
static let scrubberPopover = NSTouchBarItem.Identifier("com.TouchBarCatalog.TouchBarItem.scrubberPopover")
}

class PopoverScrubber: NSScrubber {
var presentingItem: NSPopoverTouchBarItem?
}

class PopoverScrubberViewController: NSViewController {
// MARK: NSTouchBar

override func makeTouchBar() -> NSTouchBar? {
let touchBar = NSTouchBar()
touchBar.delegate = self
touchBar.customizationIdentifier = .popoverBar
touchBar.defaultItemIdentifiers = [.scrubberPopover]
touchBar.customizationAllowedItemIdentifiers = [.scrubberPopover]

return touchBar
}
}

// MARK: NSTouchBarDelegate

extension PopoverScrubberViewController: NSTouchBarDelegate {
func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? {
guard identifier == NSTouchBarItem.Identifier.scrubberPopover else { return nil }

let popoverItem = NSPopoverTouchBarItem(identifier: identifier)
popoverItem.collapsedRepresentationLabel = "Scrubber Popover"
popoverItem.customizationLabel = "Scrubber Popover"

let scrubber = PopoverScrubber()
scrubber.register(NSScrubberTextItemView.self, forItemIdentifier: NSUserInterfaceItemIdentifier(rawValue: "TextScrubberItemIdentifier"))
scrubber.mode = .free
scrubber.selectionBackgroundStyle = .roundedBackground
scrubber.delegate = self
scrubber.dataSource = self
scrubber.presentingItem = popoverItem

popoverItem.collapsedRepresentation = scrubber

popoverItem.popoverTouchBar = PopoverTouchBarSample(presentingItem: popoverItem)

return popoverItem
}
}

// MARK: NSScrubber Data Source and delegate

extension PopoverScrubberViewController: NSScrubberDataSource, NSScrubberDelegate {

func numberOfItems(for scrubber: NSScrubber) -> Int {
return 20
}

func scrubber(_ scrubber: NSScrubber, viewForItemAt index: Int) -> NSScrubberItemView {
let itemView = scrubber.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "TextScrubberItemIdentifier"), owner: nil) as! NSScrubberTextItemView
itemView.textField.stringValue = String(index)
return itemView
}

func scrubber(_ scrubber: NSScrubber, didSelectItemAt index: Int) {
print("\(#function) at index \(index)")

if let popoverScrubber = scrubber as? PopoverScrubber,
let popoverItem = popoverScrubber.presentingItem {
popoverItem.showPopover(nil)
}
}
}

关于ios - NSScrollView 中的 NSPopoverTouchBarItems (NSTouchBar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610443/

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