🎀
Ribbon
一个简单的跨平台工具栏/自定义输入辅助视图库,适用于iOS和macOS。
使用Swift编写。
寻找...
- 一个类型安全的、XPC可用的SourceKitten(SourceKit)接口,并附带一些小甜头?查看Sylvester
😼 . - macOS上的一个浮动操作按钮?查看Fab。
🛍️ . - macOS上的一个展开气泡文本字段?查看BubbleTextField
💬 . - 一个基于Spotlight的集成入职和帮助库,适用于macOS?查看Enlighten
💡 .
特性
🎡 尝试:包含iOS和macOS示例。
-
通过编程方式或从JSON配置文件提供元素。
-
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
。
社区
致谢
- 基于Rudd Fawcett的
RFKeyboardToolbar
。
贡献者
- Chris Zielinski — 原始作者。
框架和库
Ribbon
依赖于Swift社区宝贵的贡献,尤其是
- realm/SwiftLint — 用于强制执行Swift风格和约定的工具。
许可证
“Ribbon”遵循MIT许可协议,有关更多信息请参阅LICENSE文件。