ReactiveCocoa--RACDelegateProxy

来源:互联网 发布:格灵深瞳 知乎 编辑:程序博客网 时间:2024/06/05 07:12

基本信息

父类NSObject子类类含义RAC代理类遵循的协议属性RACDelegateProxy *rac_delegateProxy;

参考vincenttsai

这个类平常使用中可能用的不多,比如界面中多个UITextfield,但是各个在代理方法中要做的事情不同,或者说有些需要实现有些不需要。

    RACDelegateProxy *delegateProxy = [[RACDelegateProxy alloc]initWithProtocol:@protocol(UITextFieldDelegate)];    [[delegateProxy rac_signalForSelector:@selector(textFieldShouldReturn:)] subscribeNext:^(RACTuple *args) {        UITextField *field  = [args first];        [field resignFirstResponder];    }];    self.textfield.delegate = (id<UITextFieldDelegate>)delegateProxy;    objc_setAssociatedObject(self.textfield, _cmd, delegateProxy, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

上面的代码片段就明确指定self.textfield- (BOOL)textFieldShouldReturn:(UITextField *)textField;会被执行。还需要注意的是,这里delegateProxy可能会无缘无故的被释放掉而crash,所以需要保留它,最后一句代码的作用就是这个。
虽然这个类在实际使用中作用不大,但是在RAC内部像UITextView (RACSignalSupport) UIAlertView (RACSignalSupport)都会用到


其实这里我们也可以通过这样方法实现

    [[self.textfield rac_signalForControlEvents:UIControlEventEditingDidEndOnExit] subscribeNext:^(id x) {        NSLog(@"%s", __func__);    }];
0 0
原创粉丝点击