Latest 1.1.0
Homepage https://github.com/YueRuo/YRUISignal
License MIT
Platforms ios 5.0, requires ARC
Authors

Help to get UI action signal

支持pod

pod 'YRUISignal'

开发中经常遇到类似的情况,viewController上贴了view1,view1上贴了view2,view2上贴了view3…
(如下图)

viewController
        —–view1
            ——view2
                  ——view3

如果在view3上触发了一个事件,需要在view1,或者viewController中处理,按照一般的处理方式,你需要:
1.在view3上做protocol,或者做block回调
2.把事件传给上一个界面(对view3来说就是给到view2)
3.view2再重复1-2的工作,直到到达相应的界面为止。

如果这个view的层次很深。。。。你恐怕就不愿意这么做了。。。

还好我们还有替代方案:用通知处理,view3上发送通知,在viewController中先注册通知,再处理它。恩恩,比上面那种要简单多了,但是我们继续思考,是否一个小小的UI事件都需要使用全局的通知呢?

这里我受Touch事件的链式响应处理以及早期BeeFramework中Signal的启发,做了这个小工具类。

这个工具类的使用很简单。比如说上面提到的view3中触发事件,viewController中处理,只需要两步:
1.在view3中触发事件时:

[self sendYRUISignalForKey:@"事件唯一名称"];

2.在viewController中实现handleYRUISignal方法

-(BOOL)handleYRUISignal:(YRUISignal *)signal{
    if ([signal.name isEqualToString:@"事件唯一名称"]) {//能处理这个信号
        return true;//根据需要中断响应链
    }
    return false;//不能处理(继续传递给下一个view)
}

打完收工,是不是非常的简单?

需要注意的是:
1.这种方式由于采用的是父view链式查找,因此只有view被add到界面上才有效,换句话说,如果这个view被removeFromSubview,则不能正确的传递信号出去。(不过你可以使用sendYRUISignal方法显式指明接受者,但是这样又有点多此一举了)
2.由于使用的是父view查找链,直至ViewController,因此如果两个view不在同一个controller上,也不能把事件传递过去。
3.这种方式个人觉得比通知简单一些,当然仁者见仁智者见智,目前Bee也是使用通知注册的方法去做的传递,但是接收处理上我们不太一致。

希望这里处理方式和思想能对大家有所帮助或者启发。

Latest podspec

{
    "name": "YRUISignal",
    "version": "1.1.0",
    "summary": "A easy ui signal send to view controller or view.",
    "description": "A easy ui signal send to view controller or view. use view chains.",
    "homepage": "https://github.com/YueRuo/YRUISignal",
    "license": "MIT",
    "authors": {
        "wangxiaoyu": "[email protected]"
    },
    "source": {
        "git": "https://github.com/YueRuo/YRUISignal.git",
        "tag": "1.1.0"
    },
    "platforms": {
        "ios": "5.0"
    },
    "requires_arc": true,
    "source_files": "YRUISignal/**/*"
}

Pin It on Pinterest

Share This