第二十三章 不同凡响:块和函数式编程

1.声明块,具体关于块的信息,可以去看:Objective-C语法之代码块(block)的使用


2.基于块的UIAlertView

使UIAlertView可以这样调用

[UIAlertView showAlertViewWithTitle:@"Test"
                                message:@"hi there"
                      cancelButtonTitle:@"Dismiss"
                       otherButtonTitle:[NSArray arrayWithObject:@"Cancel"]
                              onDismiss:^(int buttonIndex) {
                                  //处理dismiss
                                  NSLog(@"Button Dismissed");
                              } onCancel:^{
                                  //处理其他情况
                              }];


实现方法

为UIAlertView添加分类:UIAlertView+Blocks.h

//
//  UIAlertView+Blocks.h
//  UIAlertViewWithBlocks
//
//  Created by Eric on 14-1-16.
//  Copyright (c) 2014年 Eric. All rights reserved.
//

#import <Foundation/Foundation.h>

//定义块
typedef void (^DismissBlock)(int buttonIndex);
typedef void (^CancelBlock)();

@interface UIAlertView(Blocks)<UIAlertViewDelegate>

//方法定义
+ (UIAlertView *)showAlertViewWithTitle:(NSString *) title
                                message:(NSString *) message
                      cancelButtonTitle:(NSString *) cancelButtonTitle
                       otherButtonTitle:(NSArray *) otherButtons
                              onDismiss:(DismissBlock) dismissed
                               onCancel:(CancelBlock) cancelled;

@end

UIAlertView+Blocks.m文件

//
//  UIAlertView+Blocks.m
//  UIAlertViewWithBlocks
//
//  Created by Eric on 14-1-16.
//  Copyright (c) 2014年 Eric. All rights reserved.
//

#import "UIAlertView+Blocks.h"

//为块声明静态存储空间
static DismissBlock _dismissBlock;
static CancelBlock _cancelBlock;

@implementation UIAlertView(Blocks)

//事件基于块的方法
+ (UIAlertView *) showAlertViewWithTitle:(NSString *) title
                               message:(NSString *)message
                     cancelButtonTitle:(NSString *)cancelButtonTitle
                      otherButtonTitle:(NSArray *)otherButtons
                             onDismiss:(DismissBlock)dismissed
                              onCancel:(CancelBlock)cancelled
{
    //将传递过来的块,copy到静态变量中
    _cancelBlock = [cancelled copy];
    _dismissBlock = [dismissed copy];
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                    message:message
                                                   delegate:self
                                          cancelButtonTitle:cancelButtonTitle
                                          otherButtonTitles: nil];
    
    //alertView 添加按钮
    for (NSString *buttonTitle in otherButtons) {
        [alert addButtonWithTitle:buttonTitle];
    }
    //弹出来
    [alert show];
    return alert;
}

//重写 原本的alertView的点击方法
+ (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger) buttonIndex
{
    if (buttonIndex ==[alertView cancelButtonIndex]) {
        _cancelBlock();
    }else{
        _dismissBlock(buttonIndex-1);
    }
}

@end

Demo 下载地址: UIAlertViewWithBlocks.zip


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值