• 用block将UIAlertView与UIActionSheet统一起来


    用block将UIAlertView与UIActionSheet统一起来

    效果

    1. 将代理方法的实例对象方法转换成了类方法使用

    2. 要注意单例block不要长期持有,用完就释放掉

    源码

    https://github.com/YouXianMing/UIInfomationView

    //
    //  UIInfomationView.h
    //  Alert
    //
    //  Created by YouXianMing on 15/6/23.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    
    typedef void (^ClickAtIndexBlock)(NSInteger buttonIndex);
    
    @interface UIInfomationView : NSObject 
    
    /**
     *  弹出AlertView对话框
     *
     *  @param title             标题
     *  @param message           信息
     *  @param cancelButtonTitle 取消按钮
     *  @param otherButtons      其他按钮
     *  @param clickAtIndex      获取点击信息的block(进入block中的对象请用weak修饰,否则会导致被block持有)
     *
     *  @return AlertView对象
     */
    + (UIAlertView *)showAlertViewWithTitle:(NSString *)title
                                    message:(NSString *)message
                          cancelButtonTitle:(NSString *)cancelButtonTitle
                          otherButtonTitles:(NSArray *)otherButtons
                               clickAtIndex:(ClickAtIndexBlock)clickAtIndex;
    
    
    /**
     *  弹出ActionSheet对话框
     *
     *  @param view              要显示的view
     *  @param title             标题
     *  @param cancelButtonTitle 取消按钮
     *  @param destructiveButton destructive按钮
     *  @param otherButtons      其他按钮
     *  @param clickAtIndex      获取点击信息的block(进入block中的对象请用weak修饰,否则会导致被block持有)
     *
     *  @return ActionSheet对象
     */
    + (UIActionSheet *)showActionSheetInView:(UIView *)view
                                   WithTitle:(NSString *)title
                           cancelButtonTitle:(NSString *)cancelButtonTitle
                      destructiveButtonTitle:(NSString *)destructiveButton
                           otherButtonTitles:(NSArray *)otherButtons
                                clickAtIndex:(ClickAtIndexBlock)clickAtIndex;
    
    
    @end
    //
    //  UIInfomationView.m
    //  Alert
    //
    //  Created by YouXianMing on 15/6/23.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "UIInfomationView.h"
    #import <UIKit/UIKit.h>
    
    /**
     *  让类方法中的对象被持有
     */
    static ClickAtIndexBlock _clickAtIndexBlock;
    
    @interface UIInfomationView () <UIActionSheetDelegate, UIAlertViewDelegate>
    
    @end
    
    @implementation UIInfomationView
    
    + (UIAlertView *)showAlertViewWithTitle:(NSString *)title
                                    message:(NSString *)message
                          cancelButtonTitle:(NSString *)cancelButtonTitle
                          otherButtonTitles:(NSArray *)otherButtons
                               clickAtIndex:(ClickAtIndexBlock)clickAtIndex {
        
        _clickAtIndexBlock = [clickAtIndex copy];
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:cancelButtonTitle
                                              otherButtonTitles:nil];
        
        for(NSString *buttonTitle in otherButtons) {
            [alert addButtonWithTitle:buttonTitle];
        }
        
        [alert show];
        return alert;
    }
    
    + (UIActionSheet *)showActionSheetInView:(UIView *)view
                                   WithTitle:(NSString *)title
                           cancelButtonTitle:(NSString *)cancelButtonTitle
                      destructiveButtonTitle:(NSString *)destructiveButton
                           otherButtonTitles:(NSArray *)otherButtons
                                clickAtIndex:(ClickAtIndexBlock)clickAtIndex {
        
        _clickAtIndexBlock = [clickAtIndex copy];
        
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:title
                                                           delegate:[self self]
                                                  cancelButtonTitle:cancelButtonTitle
                                             destructiveButtonTitle:destructiveButton
                                                  otherButtonTitles:nil];
        
        for(NSString *buttonTitle in otherButtons) {
            [sheet addButtonWithTitle:buttonTitle];
        }
        
        [sheet showInView:view];
        return sheet;
    }
    
    #pragma mark - alertView代理
    + (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
        _clickAtIndexBlock(buttonIndex);
    }
    
    + (void)alertView:(UIAlertView*)alertView didDismissWithButtonIndex:(NSInteger) buttonIndex {
        
        _clickAtIndexBlock = nil;
    }
    
    #pragma mark - actionSheetView代理
    + (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
        
        _clickAtIndexBlock(buttonIndex);
    }
    
    + (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
        
        _clickAtIndexBlock = nil;
    }
    
    @end

    注意

  • 相关阅读:
    NodeJS学习笔记(三) 模块与包_深入学习
    NodeJS学习笔记(二) 模块与包_基础部分
    Java 开发环境搭建
    Quartz.net 定时任务矿建Demo
    MVC AJAX.BeginForm() 页面异步提交
    源码学习分享
    WPF系能优化
    谈如何阅读框架源码
    Linux源码学习(7) 2013-3-1
    Linux源码学习(6) 2013-3-1
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4596344.html
Copyright © 2020-2023  润新知