iOS开发实用技术iOS开发攻城狮的集散地

iOS 如何回调类方法里的block?

2018-07-11  本文已影响54人  请叫我小白同学

前言:最近想实现自定弹窗功能,刚好看到自己默默关注的 大佬的文章。于是研究了一下,发现一些问题。

看着他的demo,尝试去自己去实现一遍。


他的btn在类方法初始化里面:

大佬牛逼
大佬demo

btn的监听事件引用了,RAC框架(笔者惭愧,没用过...,所以用了很普遍的方法)。


我的实现.png
里面有几个坑:

1.在监听方法里面,最初我使用了

-(void)Clicked:(UIButton *)btn

发现一旦点击btn,程序就崩溃,“找不到方法”,最后想了一下,发现监听的self 代表着当前Class,也就是当前类,而我使用的是对象方法,当然找不到。 所以改回类方法了。(基础啊)

2.类方法里面,不能使用成员变量,而属性是成员变量的api。(当时我想使用全局block回调,然而不行.)


哪怎么回调呢?


方案一:

百度谷歌...,网上兜兜转转,最后还是回到原作者 他可能跟我一样,不想使用RAC回调blcok.(小伙伴可以看他的文章,方案好几种牛逼!!!!)


方案二:

这是另一个大佬指点的方法:

大佬牛逼.png

以及方案三:OC新特性

Objective-C 类属性:
@property (class) NSString *someStringProperty;

Objective-C 现在支持类属性了,与OC 中的类属性对应的是Swift的类型属性。可以在类方法中使用类属性,方便实惠.


Block 类属性:

demo.png image.png

思路

  1. 定义全局的类属性block
  2. 初始化的block,让全局的类属性block指引 self.类属性block = 初始化的block

3:

'+(void)Clicked:(UIButton *)sender{

if (self.buttonClick) {
    self.buttonClick(sender);

}

}'


控制器中:

image.png

可以根据回调的内容,做一些逻辑处理。我想干嘛就干嘛


这就是最近走的坑,如果有更好的方法,望大佬们指点一下。

文章可能不足,望大佬们指出.

上一篇下一篇

猜你喜欢

热点阅读