123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- //
- // LBXAlertAction.m
- //
- // https://github.com/MxABC/LBXAlertAction
- // Created by lbxia on 15/10/27.
- // Copyright © 2015年 lbxia. All rights reserved.
- //
- #import "LBXAlertAction.h"
- #import <UIKit/UIKit.h>
- #import "UIAlertView+LBXAlertAction.h"
- #import "UIActionSheet+LBXAlertAction.h"
- #import "UIWindow+LBXHierarchy.h"
- @implementation LBXAlertAction
- + (BOOL)isIosVersion8AndAfter
- {
- return [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ;
- }
- + (void)showAlertWithTitle:(NSString*)title msg:(NSString*)message buttonsStatement:(NSArray<NSString*>*)arrayItems chooseBlock:(void (^)(NSInteger buttonIdx))block
- {
-
- NSMutableArray* argsArray = [[NSMutableArray alloc] initWithArray:arrayItems];
-
-
- if ( [LBXAlertAction isIosVersion8AndAfter])
- {
- //UIAlertController style
-
- UIAlertController* alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
- for (int i = 0; i < [argsArray count]; i++)
- {
- UIAlertActionStyle style = (0 == i)? UIAlertActionStyleCancel: UIAlertActionStyleDefault;
- // Create the actions.
- UIAlertAction *action = [UIAlertAction actionWithTitle:[argsArray objectAtIndex:i] style:style handler:^(UIAlertAction *action) {
- if (block) {
- block(i);
- }
- }];
- [alertController addAction:action];
- }
-
- [[LBXAlertAction getTopViewController] presentViewController:alertController animated:YES completion:nil];
-
- return;
- }
-
- //UIAlertView style
-
- UIAlertView* alertView = [[UIAlertView alloc]initWithTitle:title message:message delegate:nil cancelButtonTitle:argsArray[0] otherButtonTitles:nil, nil];
-
- [argsArray removeObject:argsArray[0]];
- for (NSString *buttonTitle in argsArray) {
-
- NSLog(@"buttonTitle:%@",buttonTitle);
- [alertView addButtonWithTitle:buttonTitle];
- }
-
- [alertView showWithBlock:^(NSInteger buttonIdx)
- {
-
- block(buttonIdx);
- }];
- }
- + (UIViewController*)getTopViewController
- {
- UIWindow * window = [[UIApplication sharedApplication] keyWindow];
-
- return window.currentViewController;
- }
- + (void)showActionSheetWithTitle:(NSString*)title
- message:(NSString*)message
- cancelButtonTitle:(NSString*)cancelString
- destructiveButtonTitle:(NSString*)destructiveButtonTitle
- otherButtonTitle:(NSArray<NSString*>*)otherButtonArray
- chooseBlock:(void (^)(NSInteger buttonIdx))block
- {
- NSMutableArray* argsArray = [[NSMutableArray alloc] initWithCapacity:3];
-
-
- if (cancelString) {
- [argsArray addObject:cancelString];
- }
- if (destructiveButtonTitle) {
- [argsArray addObject:destructiveButtonTitle];
- }
-
- [argsArray addObjectsFromArray:otherButtonArray];
-
- if ( [LBXAlertAction isIosVersion8AndAfter])
- {
- UIAlertController* alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleActionSheet];
- for (int i = 0; i < [argsArray count]; i++)
- {
- UIAlertActionStyle style = (0 == i)? UIAlertActionStyleCancel: UIAlertActionStyleDefault;
-
- if (1==i && destructiveButtonTitle) {
-
- style = UIAlertActionStyleDestructive;
- }
-
- // Create the actions.
- UIAlertAction *action = [UIAlertAction actionWithTitle:[argsArray objectAtIndex:i] style:style handler:^(UIAlertAction *action) {
- if (block) {
- block(i);
- }
- }];
- [alertController addAction:action];
- }
-
- [[LBXAlertAction getTopViewController] presentViewController:alertController animated:YES completion:nil];
- return;
- }
-
- //UIActionSheet
- UIView *view = [self getTopViewController].view;
- UIActionSheet *sheet = nil;
-
- NSInteger count = argsArray.count;
-
- if (cancelString) {
- [argsArray removeObject:cancelString];
- }
- if (destructiveButtonTitle) {
- [argsArray removeObject:destructiveButtonTitle];
- }
- if (argsArray.count == 0)
- {
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:nil, nil];
- }
-
- switch (argsArray.count) {
- case 0:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:nil, nil];
- break;
-
- case 1:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0], nil];
- break;
-
- case 2:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1], nil];
- break;
- case 3:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2], nil];
- break;
-
- case 4:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2],argsArray[3], nil];
- break;
-
- case 5:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4], nil];
- break;
-
- case 6:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5], nil];
- break;
-
- case 7:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6], nil];
- break;
-
- case 8:
- sheet = [[UIActionSheet alloc]initWithTitle:title delegate:nil cancelButtonTitle:cancelString destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6],argsArray[7], nil];
- break;
-
- default:
- break;
- }
-
- [sheet showInView:view block:^(NSInteger buttonIdx,NSString* buttonTitle)
- {
- NSInteger idx = buttonIdx;
-
- if (idx == count -1) {
- idx = 0;
- }
- else
- {
- ++idx;
- }
-
- // NSLog(@"idx:%ld",idx);
-
- if (block) {
- block(idx);
- }
- }];
-
-
- }
- @end
|