iOS开发中不想用delegate协议方法怎么办?

iOS开发中不想用delegate协议方法怎么办?那就用block!

前两天在网上看到大神将alertView的delegate协议方法转为block实现,实在是大快我心(其实一开始我就不喜欢delegate的,偏向block,现在也在block学习路上)


先展示一下使用

UIAlertView *customAlertView = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"取消"otherButtonTitles:@"确定",nil];

[customAlertView showAlertViewWithCompleteBlock::^(UIAlertView*alertView,NSInteger buttonIndex) {

// code 

}];

这样alert的delegate就不用去写了,是不是很方便😄!


这个UIAlertView+Block实现方式是利用runtime来实现,在系统调用alert的delegate时,将其转化为block,代码很简单,能想出来,却不简单,谢谢这位大神,代码贴出来(详细注释)

新建AlertView的分类 UIAlertView+Block

.h

// 先定义一个 block结果回调

typedef void(^CompleteBlock) (UIAlertView *alertView, NSInteger buttonIndex);

@interfaceUIAlertView (Block)

// 显示alertView

- (void)showAlertViewWithCompleteBlock:(CompleteBlock)block;

@end

.m

#import"UIAlertView+Block.h"

#import

@implementationUIAlertView (Block)

staticcharkey;

-(void)showAlertViewWithCompleteBlock:(CompleteBlock)block

{

//首先判断这个block是否存在

if(block) {

//这里用到了runtime中绑定对象,将这个block对象绑定alertview上

objc_setAssociatedObject(self, &key,block,OBJC_ASSOCIATION_COPY);

//设置delegate

self.delegate=self;

}

//弹出提示框

[selfshow];

}

- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)btnIndex

{

//拿到之前绑定的block对象

CompleteBlockblock =objc_getAssociatedObject(self, &key);

//移除所有关联

objc_removeAssociatedObjects(self);

if(block) {

//调用block传入此时点击的按钮index

block(alertView, btnIndex);

}

}

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本篇文章在《iOS开发之Runtime常用示例总结》基础上修改,地址是「:」http://www.cocoachi...
    小__小阅读 1,910评论 1 3
  • Objective-C作为面向对象编程,“对象”(object)就是“基本构造单元”(building block...
    Mark_Lin阅读 397评论 0 1
  • Lancy's Blog Blog Archives About MeTwitterWeiboGitHubRSS ...
    其实也没有阅读 5,623评论 0 24
  • 内心真正的声音 总能听到别人说:我明明很努力了,可为什么就是不行? 看在眼里,“这个孩子真的特别努力,唉,就是做不...
    扉雪倪尘阅读 270评论 0 1
  • 青蛙见到井中的蓝天 呱呱— 傲慢地鼓起眼睛 呱呱— 它猛地向上跳起 扑通— 深深地跌入水中 1984
    开宗明义阅读 119评论 0 1

友情链接更多精彩内容