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