通常都是这样创建alert 再加一个代理
// 创建一个UIAlertView并显示出来
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:aTitle message:msg delegate:self cancelButtonTitle:str otherButtonTitles:nil];
[alertview show]; -(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLogD(@"%ld", (long)buttonIndex);
}
如果 像下边的写法 就显得牛逼多了
[[[UIAlertView alloc] initWithTitle:@"Delete This Item?"
message:@"Are you sure you want to delete this really important thing?"
cancelButtonItem:[RIButtonItem itemWithLabel:@"Yes" action:^{
// Handle "Cancel"
}]
otherButtonItems:[RIButtonItem itemWithLabel:@"Delete" action:^{
// Handle "Delete"
}], nil] show];
这个 就是 闭包强大的地方了 不需要写代理了哈哈 多方便 可读性还强 

得了懒癌 就去这个链接 下载直接用 不然 就往下看哦 高度自定义  https://github.com/jivadevoe/UIAlertView-Blocks

就是在  想要执行 这个 block方法的时候  实施方法 xxx.action();当然 要预判断 是否存在这个方法 if(xxx.action)  //这是个无参数的 闭包  如果要写有参数 闭包 参见 闭包的写法
//
// HFLittleHelperButton.h
// dailylife
//
// Created by HF on 15/12/5.
//
// #import "HFBorderLineButton.h" @interface HFLittleHelperButton : HFBorderLineButton @property (copy, nonatomic) void (^action)(); + (id)buttonWithNormalTitle:(NSString *)title action:(void(^)(void))action;
@end
关键方法已做标注 了 重点 应该看如何调用的 这个.action方法  也可以在需要的地方获取 这个 实施的btn对象 在需要到的地方  然后触发.action()都可以
//
// HFLittleHelperButton.m
// dailylife
//
// Created by HF on 15/12/5.
//
// #import "HFLittleHelperButton.h" @implementation HFLittleHelperButton + (id)buttonWithNormalTitle:(NSString *)title action:(void(^)(void))action
{
HFLittleHelperButton *btn = [HFLittleHelperButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:title forState:UIControlStateNormal];
[btn setTitleColor:COLOR_THEME_GREEN forState:UIControlStateNormal];
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[btn setBackgroundImage:[HuofarUtils createImageWithColor: COLOR_THEME_GREEN]
forState:UIControlStateHighlighted];
btn.backgroundCustomColor = COLOR_THEME_GREEN;
btn.layer.cornerRadius = ;
btn.layer.masksToBounds = YES;
btn.layer.borderColor = COLOR_THEME_GREEN.CGColor;
btn.layer.borderWidth = ;
[btn setAction:action];

[btn addTarget:self action:@selector(btnBlockAction:) forControlEvents:UIControlEventTouchUpInside];

    return btn;
}

- (void)btnBlockAction:(HFLittleHelperButton *)btn{

if(btn.action)

btn.action();

}

@end

实战:
HFLittleHelperAlertView *alert = [[HFLittleHelperAlertView alloc]initWithBlockExpression:HelperAlertViewExpressionTypePlease Title:@"标题名称" message:@"好好学习天天向上好好学习天天向上好好学习天天向上好好学习天天向上好好学习天天向上好好学习天天向上" withView:nil cancelButton:[HFLittleHelperButton buttonWithCancelTitle:@"取消" action:^{
NSLog(@"XXXXXX");
}] otherButtons:[HFLittleHelperButton buttonWithNormalTitle:@"" action:^{
NSLog(@"");
}],[HFLittleHelperButton buttonWithNormalTitle:@"" action:^{
NSLog(@"");
}],[HFLittleHelperButton buttonWithNormalTitle:@"" action:^{
NSLog(@"");
}],nil];
[alert showHelperAlertViewView];


iOS 尝试用 block 闭包 去代替delegate 实现方法的更多相关文章

  1. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  2. 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

    [背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...

  3. 【转】iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)-- 不错

    原文网址:http://www.cnblogs.com/JuneWang/p/3850859.html iOS页面间传值的方式(NSUserDefault/Delegate/NSNotificatio ...

  4. iOS页面间传值的方式 (Delegate/NSNotification/Block/NSUserDefault/单例)

    iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)   iOS页面间传值的方式(NSUserDefault/Delegate/NSN ...

  5. 【ios开发】Block编程

    1 什么是block iOS SDK 4.0开始,Apple引入了block这一特性.字面上说,block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传 ...

  6. 【ios】使用Block对POST异步操作的简单封装

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3409721.html 一般情况下的POST异步操作需要实现以下 ...

  7. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  8. 李洪强iOS开发之Block和协议

    李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...

  9. 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框

    尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ...

随机推荐

  1. kettle入门(七) 之kettle增量方案(一)全量比对取增量-依据唯一标示

    引: ods有个project表来自于上游系统,数据量不大 十几万,下游系统须要此数据,而且须要每天提供截止当天的增量数据 要求每条数据给出数据变化时间及标示,即数据若是插入 有插入时间和插入标示 若 ...

  2. 【Excle数据透视表】如何新建数据透视表样式

    如果觉得Excle给出的数据透视表样式不符合自己的心意,可以自己定义一个数据透视表样式 步骤1 单击数据透视表区域任意单元格→数据透视表工具→设计→样式组中的下拉按钮,打开数据透视表样式库→新建数据透 ...

  3. Java注解基本介绍

    注解(Annotation),又称元数据(MetaData),提供了一种在代码中添加信息的形式化的方法,将元数据和源代码结合在一起. 1. 外部配置文件如XML存在的问题: 代码复杂度较高,需要编写很 ...

  4. <!DOCTYPE>奇葩的问题

    作用:<!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本号进行编写的指令. 1.:<!DOCTYPE> 声明没有结束标签. ...

  5. linux rm -rf * 文件恢复记

    手太快,肠子都毁清了.本来是删除一个文件 rm path/myfile.txt结果不知为何加了个*,变成了rm path/myfile.txt *赶紧ls,发现所有代码都化为了乌有,还没提交,还没备份 ...

  6. 【转】【FTP】之windows8.1上搭建FTP服务器方法

    参考地址:<windows8.1上搭建FTP服务器方法>

  7. Linux 在不重启的情况下识别新挂载的磁盘

    在使用 Linux 时,有时候会因为初始时磁盘空间分配估计不足,使用中需要将挂载点扩容的情况,这就需要我们挂载新的磁盘.但是如果我们在 Linux 运行过程中挂载磁盘, Linux 又不能在不重启的情 ...

  8. django模板加载静态资源

    1. 目录结构 /mysite/setting.py部分配置: # Django settings for mysite project. import os.path TEMPLATE_DIRS = ...

  9. line-height:0的使用

    在这里不介绍line-height的概念 建议看一下张鑫旭 写的line-height 文章 这里只说 用到的一些小地方 div中img有间隙的解决方案就是用到了这个小小的属性   那么请看方案 方案 ...

  10. Linux时间时区详解与常用时间函数

    时间与时区 整个地球分为二十四时区,每个时区都有自己的本地时间. Ø  UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT = UTC),格林威治时间和UTC时间都用秒数来计 ...