- April 27, 2024
- Mins Read
A simple cross-platform toolbar/custom input accessory view library for iOS & macOS.
Written in Swift.
š”Ā Try:Ā Includes an iOS & macOS demo.
Supports push buttonsāa segmented item’s subitems become push buttons.
iOS 13:Ā actionĀ items use the newĀ context menu interaction:
Note:Ā Due to an internal assertion, the keyboard can no longer remain visible during the interaction.
- Supports push,Ā action, & segmented control toolbar items.
- ProvidesĀ
NSMenuItem
s for each item.Requirements
- iOS 10.0+ (12.0+ for dark mode)
- macOS 10.12+ (10.13+ for full functionality)
github “chriszielinski/Ribbon”
pod “Ribbon”
There are two ways of integratingĀ Ribbon
Ā into your project:
š„ The recommended approach.
The configuration file makes for a quick & easy integration. The default configuration filename isĀ ribbon-configuration.json
Ā and should be copied into the target’s bundle resources (in theĀ Copy Bundle ResourcesĀ build phase).
The JSON below defines a single action item and toolbar configurationāwhich is only relevant for the macOS platform.
š§Ā See:Ā Demos/Shared/ribbon-configuration.jsonĀ for a more comprehensive example.
{
“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”]
}
}
Integration into your view controller is as simple as:
šĀ Note:Ā The code below is an abstraction andĀ will notĀ compile.
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() { }
}
šĀ Note:Ā The code below is an abstraction andĀ will notĀ compile.
import Ribbon
class YourViewController … {
…
var ribbon: Ribbon!
override func viewDidLoad() {
let firstActionSubitem = RibbonItem(subItemTitle: “First Action Subitem”)
firstActionSubitem.action = #selector(firstActionSubitemHandler)
let secondActionSubitem = RibbonItem(subItemTitle: “Second Action Subitem”)
secondActionSubitem.action = #selector(secondActionSubitemHandler)
let actionItem = RibbonItem(controlKind: .action,
title: “Action Item”,
subitems: [firstActionSubitem, secondActionSubitem])
actionItem.action = #selector(actionItemHandler)
ribbon = Ribbon(items: [actionItem], 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() { }
}
UIKeyCommand
.RFKeyboardToolbar
.Ribbon
Ā depends on the wonderful contributions of the Swift community, namely:
Horizon SDK is a state of the art real-time video recording / photo shooting iOS library. Some of the features ...