Ribbon 1.0

Ribbon 1.0

Chris Zielinski维护。




Ribbon 1.0

Ribbon🎀

Carthage compatible Pod Version codebeat badge Swift Version GitHub license PRs Welcome

Header

一个简单的跨平台工具栏/自定义输入辅助视图库,适用于iOS和macOS。
使用Swift编写。


寻找...

  • 一个类型安全的、XPC可用的SourceKitten(SourceKit)接口,并附带一些小甜头?查看Sylvester😼.
  • macOS上的一个浮动操作按钮?查看Fab。🛍️.
  • macOS上的一个展开气泡文本字段?查看BubbleTextField💬.
  • 一个基于Spotlight的集成入职和帮助库,适用于macOS?查看Enlighten💡.

特性

🎡 尝试:包含iOS和macOS示例。

  • 通过编程方式或从JSON配置文件提供元素。

  • 暗黑模式(iOSmacOS

  • iOS

  • macOS

    • 支持悬停、操作和分段控制工具栏项。
    • 为每个项目提供NSMenuItem
  • + 更多!

需求

  • iOS 10.0+
  • macOS 10.12+ (10.13+ 为全部功能)

安装

Ribbon 可通过 Carthage 或 CocoaPods 进行安装。

Carthage

github "chriszielinski/Ribbon"

CocoaPods

pod "Ribbon"

用法

有两种方法可以将 Ribbon 集成到您的项目中

配置文件

🔥推荐方法。

配置文件可以快速轻松地集成。默认配置文件名为 ribbon-configuration.json,应将其复制到目标捆绑资源(在 Copy Bundle Resources 构建阶段)中。

下面的 JSON 定义了一个单独的操作项和工具栏配置,这对于 macOS 平台是相关的。

👀 参阅: Demos/Shared/ribbon-configuration.json 以获取更全面的示例。

{
    "items": [
        {
            "action": "actionItemHandler",
            "controlKind": "action",
            "identifier": "action-item-identifier",
            "imageName": "NSActionTemplate",
            "keyEquivalent": "a",
            "keyEquivalentModifier": ["command", "shift"],
            "title": "Action Item",
            "toolTip": "The action button's tool-tip.",
            "subitems": [
                {
                    "action": "firstActionSubitemHandler",
                    "identifier": "first-action-subitem",
                    "imageName": "hand.thumbsup",
                    "keyEquivalent": "1",
                    "keyEquivalentModifier": ["command"],
                    "title": "First Action Subitem",
                    "toolTip": "The first action's tool-tip."
                },
                {
                    "action": "secondActionSubitemHandler",
                    "identifier": "second-action-subitem",
                    "imageName": "hand.thumbsdown",
                    "keyEquivalent": "2",
                    "keyEquivalentModifier": ["command"],
                    "title": "Second Action Subitem",
                    "toolTip": "The second action's tool-tip."
                }
            ]
        }
    ],
    "toolbar": {
        "displayMode": "iconOnly",
        "sizeMode": "regular",
        "identifier": "toolbar-identifier",
        "defaultItems" : ["NSToolbarFlexibleSpaceItem", "action-item-identifier"]
    }
}

将集成到您的视图控制器中非常简单

📌 注意: 下面代码是一个抽象实现,无法 编译。

import Ribbon

class YourViewController ... {

    ...
    
    var ribbon: Ribbon!

    override func viewDidLoad() {
        ribbon = try! Ribbon.loadFromMainBundle(target: self)

        #if canImport(UIKit)
        textView.inputAccessoryView = ribbon
        #endif
    }
    
    #if canImport(AppKit)
    override func viewWillAppear() {
        view.window?.toolbar = ribbon.toolbar

        super.viewWillAppear()
    }
    #endif
    
    @objc
    func actionItemHandler() { }

    @objc
    func firstActionSubitemHandler() { }

    @objc
    func secondActionSubitemHandler() { }

}

以编程方式

📌 注意: 下面代码是一个抽象实现,无法 编译。

import Ribbon

class YourViewController ... {

    ...
    
    var ribbon: Ribbon!

    override func viewDidLoad() {
        let firstActionSubitem = RibbonItem(subItemTitle: "First Action Subitem",
                                            action: #selector(firstActionSubitemHandler))
        let secondActionSubitem = RibbonItem(subItemTitle: "Second Action Subitem",
                                             action: #selector(secondActionSubitemHandler))

        let actionItem = RibbonItem(controlKind: .action,
                                    title: "Action Item",
                                    action: #selector(actionItemHandler),
                                    subitems: [firstActionSubitem, secondActionSubitem])
        ribbon = Ribbon(items: [actionItem], target: ribbonTarget)

        #if canImport(UIKit)
        textView.inputAccessoryView = ribbon
        #endif
    }
    
    #if canImport(AppKit)
    override func viewWillAppear() {
        view.window?.toolbar = ribbon.toolbar

        super.viewWillAppear()
    }
    #endif
    
    @objc
    func actionItemHandler() { }

    @objc
    func firstActionSubitemHandler() { }

    @objc
    func secondActionSubitemHandler() { }

}

// 待办

  • 添加文档。
  • 实现 UIKeyCommand

社区

  • 发现了一个错误?打开一个问题
  • 功能想法? 打开一个问题 自己做,完成后提PR😅(或者你可以打开一个问题🙄).
  • 想要贡献?提交一个PR

致谢

贡献者

框架和库

Ribbon 依赖于Swift社区宝贵的贡献,尤其是

许可证

“Ribbon”遵循MIT许可协议,有关更多信息请参阅LICENSE文件。