zoukankan      html  css  js  c++  java
  • LGLAlertView 提示框

    使用与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
    有兴趣的可以加入QQ群:457236811
  • 相关阅读:
    绿盟UTS综合威胁探针管理员任意登录
    深信服EDR3.2.21任意代码执行
    linux反弹shell总结
    mysql在8.0版本下修改密码的命令
    Linux提权常用漏洞速查表
    windows提权常用系统漏洞与补丁编号速查对照表
    通达OA<=11.5版本SQL注入——附件上传
    通达OA<=11.5版本SQL注入——日程安排
    希尔伯特曲线python3实现
    深信服edr控制中心漏洞——验证码逻辑错误
  • 原文地址:https://www.cnblogs.com/ljmaque/p/LGLAlertView.html
Copyright © 2011-2022 走看看