Sheeeeeeeeet lets you create menus. These menus can then be used as context menus, action sheets or in any way you like, in UIKit or in SwiftUI.
Sheeeeeeeeet comes with many item types (standard items, buttons, titles, toggles etc.) and can be extended with custom ones.
Sheeeeeeeeet's custom action sheets can be styled to look just like
UIAlertControllers or completely different. You can also customize how they are presented and dismissed.
The easiest way to add Sheeeeeeeeet to your project in Xcode 11 is to use Swift Package Manager:
IMPORTANT There is currently problems with the Carthage installation, which cause Apple to reject apps that pull in Sheeeeeeeeeeet with Carthage. See this issue for more information. Until it's solved, use SPM or CocoaPods instead.
Sheeeeeeeeet to your app without a dependency manager, clone this repository, add
Sheeeeeeeeet.xcodeproj to your project and
Sheeeeeeeeet.framework as an embedded app binary and target dependency.
Creating a menu
With Sheeeeeeeeet, you start off by creating a menu, like this:
let item1 = MenuItem(title: "Int", value: 1) let item2 = MenuItem(title: "Car", value: Car()) let button = OkButton(title: "OK") let items = [item1, item2, button] let menu = Menu(title: "Select a type", items: items)
There are many built-in menu item types, e.g. selectable items, links, buttons, titles, collections, custom items etc. A complete list can be found here.
Present the menu as an action sheet
You can then present the menu as a custom action sheet or use it to create an action sheet that you can configure however you want:
menu.presentAsActionSheet(in: vc, from: view, action: ...)
Add the menu as a context menu
You can also apply the menu as an iOS 13 context menu to any view you like:
menu.addAsContextMenu(to: view, action: ...)
You can find more information in this context menu guide.
Present the menu as an alert controller
You can also present the menu as a
let delegate = menu.presentAsAlertController(in: self, from: view, action: ...)
You can find more information in [this alert controller guide][Alert-Controllers].
When you have the basics under control, check out this advanced example to see how you can take things further.
This repository contains a demo app that demonstrates different menus and menu items, including subclassing and appearance adjustments. To try it out, open and run the
Feel free to reach out if you have questions or if you want to contribute in any way:
Sheeeeeeeeet is available under the MIT license. See LICENSE file for more info.
Help us keep the lights on
3.0.8 - Nov 5, 2019
This version adjusts the secondary action signature to also provide the affected item. It's a breaking change, but a small one, so deal with it I guess ¯\_(ツ)_/¯
This version also makes the
ActionSheetItemHandler protocol implementations
open so they're possible to override.
3.0.5 - Nov 1, 2019
This version changes
contextMenuDelegate to an
Any instead of its concrete type, to make it possible to use it on older iOS versions.
This should not have any side-effects, since it's only used to retain the instance, never use it.
3.0.6 - Nov 1, 2019
This version solves an App Store submission rejection that occurred when an app pulled in Sheeeeeeeeet with Carthage.
3.0.7 - Nov 1, 2019
This version adds a new
SecondaryActionItem which lets you specify a secondary action for an item.
It also adds a new
MenuCreator protocol that can be implemented to postpone the creation of a menu, which may be good for prestanda when adding a context menu to every item in a large view collection.
3.0.4 - Oct 20, 2019
This version makes the
backgroundView property public.