diff options
Diffstat (limited to 'Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockTableAlertView.m')
| -rw-r--r-- | Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockTableAlertView.m | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockTableAlertView.m b/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockTableAlertView.m new file mode 100644 index 0000000..a309219 --- /dev/null +++ b/Pods/BlockAlertsAnd-ActionSheets/BlockAlertsDemo/ToAddToYourProjects/BlockTableAlertView.m @@ -0,0 +1,225 @@ +// +// BlockTableAlertView.m +// BlockAlertsDemo +// +// Created by Barrett Jacobsen on 2/14/12. +// Copyright (c) 2012 CodeCrop Software. All rights reserved. +// + +#define SUPPORTS_MULTIPLE_SELECTION [self.tableView respondsToSelector:@selector(setAllowsMultipleSelectionDuringEditing:)] + +#define kVerticalSpacing 5 +#define kHorizontalMargin 12 + +#define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad + +#define IS_LANDSCAPE UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) + +#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) + +#define kNumMaximumVisibleRowsInTableView (IS_IPAD ? 15 : (IS_LANDSCAPE ? 4 : (IS_IPHONE_5 ? 6 : 5))) + +#import "BlockTableAlertView.h" +#import <QuartzCore/QuartzCore.h> +#import <dispatch/dispatch.h> + +@implementation BlockTableAlertView +@synthesize tableView=_tableView; +@synthesize type=_type; +@synthesize didSelectRow; +@synthesize willDismissWithButtonIndex; +@synthesize maxSelection; +@synthesize cellForRow; +@synthesize willPresent; +@synthesize numberOfRowsInTableAlert; + +@dynamic indexPathsForSelectedRows; + ++ (BlockTableAlertView *)tableAlertWithTitle:(NSString *)title message:(NSString *)message +{ + return [[[BlockTableAlertView alloc] initWithTitle:title message:message] autorelease]; +} + + +- (id)initWithTitle:(NSString *)title message:(NSString *)message { + self = [super initWithTitle:title message:message]; + + if (self) { + if (!SUPPORTS_MULTIPLE_SELECTION) + selectedItems = [[NSMutableArray alloc] init]; + } + + return self; +} + +- (void)addComponents:(CGRect)frame { + [super addComponents:frame]; + + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; + [_tableView setDelegate:self]; + [_tableView setDataSource:self]; + [_tableView setBackgroundColor:[UIColor colorWithWhite:0.90 alpha:1.0]]; + [_tableView setRowHeight:kDefaultRowHeight]; + [_tableView setSeparatorColor:[UIColor lightGrayColor]]; + _tableView.layer.cornerRadius = kTableCornerRadius; + } + + CGFloat tableHeight = kDefaultRowHeight * MIN(self.numberOfRowsInTableAlert(self), kNumMaximumVisibleRowsInTableView); + + _tableView.frame = CGRectMake(kHorizontalMargin, _height, frame.size.width - kHorizontalMargin * 2, tableHeight); + + [_view addSubview:_tableView]; + _height += tableHeight + kVerticalSpacing; +} + + +- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated { + if (self.willDismissWithButtonIndex) + self.willDismissWithButtonIndex(self, buttonIndex); + + [super dismissWithClickedButtonIndex:buttonIndex animated:animated]; +} + +- (void)updateAlertHeight:(CGFloat)oldTableHeight { + CGFloat newTableHeight = kDefaultRowHeight * MIN(self.numberOfRowsInTableAlert(self), kNumMaximumVisibleRowsInTableView); + + if (newTableHeight != oldTableHeight) { + CGFloat diff = newTableHeight - oldTableHeight; + [UIView animateWithDuration:0.3 animations:^{ + [self.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + UIView *v = obj; + if (v.frame.origin.y >= _tableView.frame.origin.y + _tableView.frame.size.height) + v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y + diff, v.frame.size.width, v.frame.size.height); + }]; + + _tableView.frame = CGRectMake(_tableView.frame.origin.x, _tableView.frame.origin.y, _tableView.frame.size.width, newTableHeight); + self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height + diff); + }]; + } +} + +- (void)reloadData { + CGFloat oldTableHeight = _tableView.frame.size.height; + + [self.tableView reloadData]; + + [self updateAlertHeight:oldTableHeight]; +} + +- (void)insertRowsAtIndexPaths:(NSArray*)rows { + CGFloat oldTableHeight = _tableView.frame.size.height; + + [self.tableView insertRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationAutomatic]; + + [self updateAlertHeight:oldTableHeight]; +} + +- (void)deleteRowsAtIndexPaths:(NSArray*)rows { + CGFloat oldTableHeight = _tableView.frame.size.height; + + [self.tableView deleteRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationAutomatic]; + + [self updateAlertHeight:oldTableHeight]; +} + + +- (void)show { + if (!_shown) + [self setupDisplay]; + + if (self.willPresent) + self.willPresent(self); + + if (self.type == BlockTableAlertTypeMultipleSelct && SUPPORTS_MULTIPLE_SELECTION) { + self.tableView.allowsMultipleSelectionDuringEditing = YES; + self.tableView.editing = YES; + } + + [super show]; +} + +#pragma mark - iOS 4 Compatibility + +- (NSArray*)indexPathsForSelectedRows { + if (SUPPORTS_MULTIPLE_SELECTION) { + return self.tableView.indexPathsForSelectedRows; + } + else { + return selectedItems; + } +} + +- (void)selectRowAtIndexPath:(NSIndexPath*)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scroll { + if (SUPPORTS_MULTIPLE_SELECTION) { + [self.tableView selectRowAtIndexPath:indexPath animated:animated scrollPosition:scroll]; + } + else { + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + + if (cell.accessoryType == UITableViewCellAccessoryNone) { + [selectedItems addObject:indexPath]; + cell.accessoryType = UITableViewCellAccessoryCheckmark; + } + } +} + + +#pragma mark - UITableViewDelegate + +- (NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (self.type == BlockTableAlertTypeSingleSelect || self.maxSelection == 0) + return indexPath; + + NSIndexPath *toSelect = indexPath; + + if ([self.indexPathsForSelectedRows count] + 1 > self.maxSelection) + toSelect = nil; + + return toSelect; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if (_type == BlockTableAlertTypeSingleSelect) + [self dismissWithClickedButtonIndex:-1 animated:YES]; + + if (!SUPPORTS_MULTIPLE_SELECTION) { + UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; + + if (cell.accessoryType == UITableViewCellAccessoryNone) { + [selectedItems addObject:indexPath]; + cell.accessoryType = UITableViewCellAccessoryCheckmark; + + if (self.didSelectRow) + self.didSelectRow(self, [indexPath row]); + } + else { + [selectedItems removeObject:indexPath]; + cell.accessoryType = UITableViewCellAccessoryNone; + } + + [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; + + return; + } + + if (self.didSelectRow) + self.didSelectRow(self, [indexPath row]); +} + +#pragma mark - UITableViewDataSource + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + return self.cellForRow(self,[indexPath row]); +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.numberOfRowsInTableAlert(self); +} + + +@end |
