NewsBlur/clients/ios/Other Sources/Overshare Kit/OSKActionSheet.m
2014-05-19 13:33:42 -07:00

126 lines
3.6 KiB
Objective-C
Executable file

//
// OSKActionSheet.h
// Overshare Kit
//
// Created by Jared Sinclair October 18, 2013.
// Copyright (c) 2013 Jared Sinclair & Justin Williams LLC. All rights reserved.
//
#import "OSKActionSheet.h"
#import "OSKLogger.h"
#import "OSKPresentationManager.h"
@implementation OSKActionSheetButtonItem
- (id)initWithTitle:(NSString *)title actionBlock:(OSKActionSheetActionBlock)actionBlock {
self = [super init];
if (self) {
_title = title;
_actionBlock = [actionBlock copy];
}
return self;
}
@end
@interface OSKActionSheet () <UIActionSheetDelegate>
@property (strong, nonatomic) OSKActionSheetButtonItem *cancelButtonItem;
@property (strong, nonatomic) OSKActionSheetButtonItem *destructiveButtonItem;
@property (strong, nonatomic) NSMutableArray *buttonItems;
@property (assign, nonatomic) BOOL shouldKeepOverlayVisibleAfterActionItemPresses;
@end
@implementation OSKActionSheet
+ (OSKActionSheetButtonItem *)okayItem {
NSString *title = [[OSKPresentationManager sharedInstance] localizedText_Okay];
OSKActionSheetButtonItem *item = [[OSKActionSheetButtonItem alloc] initWithTitle:title actionBlock:nil];
return item;
}
+ (OSKActionSheetButtonItem *)cancelItem {
NSString *title = [[OSKPresentationManager sharedInstance] localizedText_Cancel];
OSKActionSheetButtonItem *item = [[OSKActionSheetButtonItem alloc] initWithTitle:title actionBlock:nil];
return item;
}
- (id)initWithTitle:(NSString *)optionalTitle
cancelButtonItem:(OSKActionSheetButtonItem *)cancelButtonItem
destructiveButtonItem:(OSKActionSheetButtonItem *)destructiveButtonItem
otherButtonItems:(NSArray *)otherButtonItems {
self = [super initWithTitle:optionalTitle
delegate:nil
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
if (self) {
self.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
_cancelButtonItem = cancelButtonItem;
_destructiveButtonItem = destructiveButtonItem;
if (otherButtonItems.count) {
_buttonItems = [NSMutableArray arrayWithCapacity:otherButtonItems.count];
for (OSKActionSheetButtonItem *buttonItem in otherButtonItems) {
[_buttonItems addObject:buttonItem];
[self addButtonWithTitle:buttonItem.title];
}
}
NSInteger buttonCount = _buttonItems.count;
if (destructiveButtonItem) {
[self addButtonWithTitle:destructiveButtonItem.title];
[self setDestructiveButtonIndex:buttonCount];
buttonCount += 1;
}
if (cancelButtonItem) {
[self addButtonWithTitle:cancelButtonItem.title];
[self setCancelButtonIndex:buttonCount];
}
self.delegate = self;
}
return self;
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == actionSheet.cancelButtonIndex) {
if (self.cancelButtonItem.actionBlock) {
self.cancelButtonItem.actionBlock();
}
}
else if (buttonIndex == actionSheet.destructiveButtonIndex) {
if (self.destructiveButtonItem.actionBlock) {
self.destructiveButtonItem.actionBlock();
}
}
else {
OSKActionSheetButtonItem *item = [self.buttonItems objectAtIndex:buttonIndex];
if (item.actionBlock) {
item.actionBlock();
}
}
}
- (void)showInView:(UIView *)view {
if (view != nil) {
[super showInView:view];
} else {
OSKLog(@"Prevented crasher: Invalid parameter not satisfying: view != nil");
}
}
@end