Replacement for UIActionSheet on iOS 7, with customizable fonts and colors, and block-based actions.
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.
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.
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).
It's pretty easy. The steps are:
- Create a
JTSActionSheetTheme
, either from scratch or withdefaultTheme
. - Setup
JTSActionSheetItems
representing your buttons and cancel button. - 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];