JTSActionSheet 1.0.1

JTSActionSheet 1.0.1

TestsTested
LangLanguage Obj-CObjective C
License MIT
ReleasedLast Release Dec 2014

Maintained by Jared Sinclair.



  • By
  • Jared Sinclair

Replacement for UIActionSheet on iOS 7, with customizable fonts and colors, and block-based actions.

Screenshots

Both of these screenshots were made with JTSActionSheet. I've taken great pains to mimic the native look of UIActionSheet on iOS 7 where possible.

Why Use This?

JTSActionSheet will help you if your project has any of these requirements:

  • You need to specify custom fonts for buttons and titles.
  • You would like to choose custom colors for everything: button titles, background colors, etc.
  • You want to use a simple block-based API for button actions.
  • You need to easily drop back to a native appearance for some edge cases.

Surprisingly, there aren't any other ready-made solutions available in the wild. So I made one.

When Not To Use This

Don't use this if you need:

  • iOS 8 features like those provided by UIAlertController.
  • iPad support. It might work on the iPad, but I highly doubt it will look good.
  • Scrollable action sheets (you know, how the native UIActionSheet becomes a scrollable table view when there are too many items to fit in a given area).
  • Landscape support (unless you don't mind a wide horizontal stretch).

How to Use This

It's pretty easy. The steps are:

  1. Create a JTSActionSheetTheme, either from scratch or with defaultTheme.
  2. Setup JTSActionSheetItems representing your buttons and cancel button.
  3. Create and show a new JTSActionSheet.

Here is some sample code showing it all together:

// Import this

#import "JTSActionSheet.h"

[...]

// Create a theme

JTSActionSheetTheme *theme = [JTSActionSheetTheme defaultTheme];


// Setup your buttons

JTSActionSheetItem *buyAll = [JTSActionSheetItem itemWithTitle:@"Buy All" action:^{
    // do stuff
} isDestructive:NO];

JTSActionSheetItem *deleteAll = [JTSActionSheetItem itemWithTitle:@"Delete All" action:^{
    // do stuff
} isDestructive:YES];

JTSActionSheetItem *cancel = [JTSActionSheetItem itemWithTitle:@"Cancel" action:^{
    // respond to cancellation
    // Action blocks can be nil if you want.
} isDestructive:NO];


// Create & Show an Action Sheet

JTSActionSheet *sheet = [[JTSActionSheet alloc] initWithTheme:theme
                                                        title:@"Your Options"
                                                  actionItems:@[buyAll, deleteAll]
                                                   cancelItem:cancel];
[sheet showInView:self.view];