首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSPopoverTouchBarItems in NSScrollView (NSTouchBar)

NSPopoverTouchBarItems in NSScrollView (NSTouchBar)
EN

Stack Overflow用户
提问于 2019-02-09 20:30:48
回答 1查看 210关注 0票数 3

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

目前,我的视图层次结构类似于下面的列表。

  • NSTouchBar
    • NSCustomTouchBarItem
      • NSScrollView
        • NSStackView
          • NSButtons阵列

上面的层次结构输出以下屏幕快照。

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

EN

回答 1

Stack Overflow用户

发布于 2019-02-21 12:51:27

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

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

请查看此存储库,以获得可能有助于您的更多信息和示例代码:

https://github.com/loretoparisi/touchbar

代码语言:javascript
运行
复制
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)
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54610443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档