使用與iOS8 以後,只是把系統的UIAlertController進行了封裝,省的每次用的時候要寫很多的代碼。封裝後只需要一句代碼即可 , deome 地址:https://github.com/liguoliangiOS/LGLAlertView.git 上代碼LGLAlertView.h: L ...
使用與iOS8 以後,只是把系統的UIAlertController進行了封裝,省的每次用的時候要寫很多的代碼。封裝後只需要一句代碼即可 , deome 地址:https://github.com/liguoliangiOS/LGLAlertView.git
上代碼LGLAlertView.h:
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> typedef NS_ENUM(NSInteger, LGLAlertViewActionStyle) { LGLAlertViewActionStyleDefault = 0, LGLAlertViewActionStyleCancel, LGLAlertViewActionStyleDestructive }; /** alertView的回調block */ typedef void (^CallBackBlock)(NSInteger btnIndex); /** alertView的回調block */ typedef void (^TextFieldCallBackBlock)(NSString * text); @interface LGLAlertView : NSObject /** * 單個或者沒有按鈕 不執行任何操作 只是提示總用 * @param title 提示的標題 * @param message 提示信息 * @param btnTitle 單個按鈕的標題名稱 * */ + (void)showAlertViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message buttonTitle:(NSString *)btnTitle buttonStyle:(LGLAlertViewActionStyle)buttonStyle; /** * 有兩個或者多個按鈕 確定 取消 * @param title 提示的標題 * @param message 提示信息 * @param btnTitle 單個按鈕的標題名稱 * @param cancelButtonTitle 取消按鈕 * @param destructiveBtn destructiveBtn按鈕 * @param otherButtonTitles 確定按鈕 */ + (void)showAlertViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message CallBackBlock:(CallBackBlock)textBlock cancelButtonTitle:(NSString *)cancelBtnTitle destructiveButtonTitle:(NSString *)destructiveBtnTitle otherButtonTitles:(NSString *)otherBtnTitles,...NS_REQUIRES_NIL_TERMINATION; /** * 有輸入框 確定 取消 (註: 這裡只做了有一個輸入框) * @param title 提示的標題 * @param message 提示信息 * @param btnTitle 單個按鈕的標題名稱 * @param cancelButtonTitle 取消按鈕 * @param destructiveBtn destructiveBtn按鈕 * @param otherButtonTitles 確定按鈕 */ + (void)showAlertTextFieldViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message TextFeildCallBackBlock:(TextFieldCallBackBlock)block cancelButtonTitle:(NSString *)cancelBtnTitle otherButtonTitles:(NSString *)otherBtnTitle; /** * 單個或者沒有按鈕ActionSheet 僅僅只是提示作用 按鈕沒有響應事件 * @param title 提示的標題 * @param message 提示信息 * @param btnTitle 單個按鈕的標題名稱 * */ + (void)showAlertActionSheetViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message buttonTitle:(NSString *)btnTitle buttonStyle:(LGLAlertViewActionStyle)buttonStyle; /** * 沒有按鈕ActionSheet 按鈕有響應事件 * @param title 提示的標題 * @param message 提示信息 * @param btnTitle 單個按鈕的標題名稱 * */ + (void)showAlertActionSheetWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message callbackBlock:(CallBackBlock)block destructiveButtonTitle:(NSString *)destructiveBtnTitle cancelButtonTitle:(NSString *)cancelBtnTitle otherButtonTitles:(NSString *)otherBtnTitles, ...NS_REQUIRES_NIL_TERMINATION; @end
LGLAlertView.m:文件
#import "LGLAlertView.h" #define LGLAlertShowTime 1.0 @implementation LGLAlertView // ======================================================================== ----- AlertView start----- ================================================================================== // 單個或沒有按鈕 + (void)showAlertViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message buttonTitle:(NSString *)btnTitle buttonStyle:(LGLAlertViewActionStyle)buttonStyle { UIAlertController * alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if (btnTitle.length) { UIAlertActionStyle actionStyle = (buttonStyle == LGLAlertViewActionStyleDefault) ? UIAlertActionStyleDefault : ((buttonStyle == LGLAlertViewActionStyleCancel) ? UIAlertActionStyleCancel : UIAlertActionStyleDestructive); UIAlertAction * alertAction = alertAction = [UIAlertAction actionWithTitle:btnTitle style:actionStyle handler:^(UIAlertAction * _Nonnull action) { [self performSelector:@selector(dismissAlertController:) withObject:alertController afterDelay:LGLAlertShowTime]; }];; [alertController addAction:alertAction]; [viewController presentViewController:alertController animated:YES completion:nil]; } else { [viewController presentViewController:alertController animated:YES completion:nil]; [self performSelector:@selector(dismissAlertController:) withObject:alertController afterDelay:LGLAlertShowTime]; } } // 單個或多個按鈕 + (void)showAlertViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message CallBackBlock:(CallBackBlock)block cancelButtonTitle:(NSString *)cancelBtnTitle destructiveButtonTitle:(NSString *)destructiveBtnTitle otherButtonTitles:(NSString *)otherBtnTitles,... { UIAlertController * alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; //添加按鈕 if (cancelBtnTitle.length) { UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:cancelBtnTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { block(0); }]; [alertController addAction:cancelAction]; } if (destructiveBtnTitle.length) { UIAlertAction * destructiveAction = [UIAlertAction actionWithTitle:destructiveBtnTitle style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { block(1); }]; [alertController addAction:destructiveAction]; } if (otherBtnTitles.length) { UIAlertAction *otherActions = [UIAlertAction actionWithTitle:otherBtnTitles style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { (!cancelBtnTitle.length && !destructiveBtnTitle.length) ? block(0) : (((cancelBtnTitle.length && !destructiveBtnTitle.length) || (!cancelBtnTitle.length && destructiveBtnTitle.length)) ? block(1) : block(2)); }]; [alertController addAction:otherActions]; va_list args; va_start(args, otherBtnTitles); if (otherBtnTitles.length) { NSString * otherString; int index = 2; (!cancelBtnTitle.length && !destructiveBtnTitle.length) ? (index = 0) : ((cancelBtnTitle.length && !destructiveBtnTitle.length) || (!cancelBtnTitle.length && destructiveBtnTitle.length) ? (index = 1) : (index = 2)); while ((otherString = va_arg(args, NSString*))) { index ++ ; UIAlertAction * otherActions = [UIAlertAction actionWithTitle:otherString style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { block(index); }]; [alertController addAction:otherActions]; } } va_end(args); } [viewController presentViewController:alertController animated:YES completion:nil]; //如果沒有按鈕,自動延遲消失 if (!cancelBtnTitle.length && !destructiveBtnTitle.length && !otherBtnTitles) { //此時self指本類 [self performSelector:@selector(dismissAlertController:) withObject:alertController afterDelay:LGLAlertShowTime]; } } // 有輸入框 + (void)showAlertTextFieldViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message TextFeildCallBackBlock:(TextFieldCallBackBlock)textBlock cancelButtonTitle:(NSString *)cancelBtnTitle otherButtonTitles:(NSString *)otherBtnTitle { UIAlertController * alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { }]; if (cancelBtnTitle.length) { UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:cancelBtnTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { [self dismissAlertController:alertController]; }]; [alertController addAction:cancelAction]; } if (otherBtnTitle.length) { UIAlertAction * otherAction = [UIAlertAction actionWithTitle:otherBtnTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { textBlock([alertController.textFields firstObject].text); }]; [alertController addAction:otherAction]; } [viewController presentViewController:alertController animated:YES completion:nil]; //如果沒有按鈕,自動延遲消失 if (!cancelBtnTitle.length && !otherBtnTitle.length) { //此時self指本類 [self performSelector:@selector(dismissAlertController:) withObject:alertController afterDelay:LGLAlertShowTime]; } } // ======================================================================== ----- AlertView end----- ================================================================================== #pragma mark ==== 點擊事件 ====== + (void)dismissAlertController:(UIAlertController *)alert { [alert dismissViewControllerAnimated:YES completion:nil]; } // ======================================================================== -- ActionSheet Start -- ==================================================================================== + (void)showAlertActionSheetViewWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message buttonTitle:(NSString *)btnTitle buttonStyle:(LGLAlertViewActionStyle)buttonStyle { UIAlertController * actionController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleActionSheet]; if (btnTitle.length) { UIAlertActionStyle actionStyle = (buttonStyle == LGLAlertViewActionStyleDefault) ? UIAlertActionStyleDefault : ((buttonStyle == LGLAlertViewActionStyleCancel) ? UIAlertActionStyleCancel : UIAlertActionStyleDestructive); UIAlertAction * alertAction = alertAction = [UIAlertAction actionWithTitle:btnTitle style:actionStyle handler:^(UIAlertAction * _Nonnull action) { [self performSelector:@selector(dismissAlertController:) withObject:actionController afterDelay:LGLAlertShowTime]; }];; [actionController addAction:alertAction]; [viewController presentViewController:actionController animated:YES completion:nil]; } else { [viewController presentViewController:actionController animated:YES completion:nil]; //如果沒有按鈕,自動延遲消失 [self performSelector:@selector(dismissAlertController:) withObject:actionController afterDelay:LGLAlertShowTime]; } } + (void)showAlertActionSheetWith:(UIViewController *)viewController title:(NSString *)title message:(NSString *)message callbackBlock:(CallBackBlock)block destructiveButtonTitle:(NSString *)destructiveBtnTitle cancelButtonTitle:(NSString *)cancelBtnTitle otherButtonTitles:(NSString *)otherBtnTitles, ... { UIAlertController * actionController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleActionSheet]; //添加按鈕 if (destructiveBtnTitle.length) { UIAlertAction *destructiveAction = [UIAlertAction actionWithTitle:destructiveBtnTitle style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { block(0); }]; [actionController addAction:destructiveAction]; } if (cancelBtnTitle.length) { UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:cancelBtnTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { destructiveBtnTitle.length ? block(1) : block(0); }]; [actionController addAction:cancelAction]; } if (otherBtnTitles.length) { UIAlertAction *otherActions = [UIAlertAction actionWithTitle:otherBtnTitles style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { (!cancelBtnTitle.length && !destructiveBtnTitle.length) ? block(0) : (((destructiveBtnTitle.length && !cancelBtnTitle.length) || (!destructiveBtnTitle.length && cancelBtnTitle.length)) ? block(1) : block(2)); }]; [actionController addAction:otherActions]; va_list args; va_start(args, otherBtnTitles); if (otherBtnTitles.length) { NSString * otherString; int index = 2; (!cancelBtnTitle.length && !destructiveBtnTitle.length) ? (index = 0) : ((cancelBtnTitle.length && !destructiveBtnTitle.length) || (!cancelBtnTitle.length && destructiveBtnTitle.length) ? (index = 1) : (index = 2)); while ((otherString = va_arg(args, NSString*))) { index ++ ; UIAlertAction * otherActions = [UIAlertAction actionWithTitle:otherString style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { block(index); }]; [actionController addAction:otherActions]; } } va_end(args); } [viewController presentViewController:actionController animated:YES completion:nil]; //如果沒有按鈕,自動延遲消失 if (!cancelBtnTitle.length && !destructiveBtnTitle.length && !otherBtnTitles.length) { //此時self指本類 [self performSelector:@selector(dismissAlertController:) withObject:actionController afterDelay:LGLAlertShowTime]; } } @end