UIControl+RACSignalSupport.m 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // UIControl+RACSignalSupport.m
  3. // ReactiveObjC
  4. //
  5. // Created by Josh Abernathy on 4/17/12.
  6. // Copyright (c) 2012 GitHub, Inc. All rights reserved.
  7. //
  8. #import "UIControl+RACSignalSupport.h"
  9. #import <ReactiveObjC/RACEXTScope.h>
  10. #import "RACCompoundDisposable.h"
  11. #import "RACDisposable.h"
  12. #import "RACSignal.h"
  13. #import "RACSubscriber.h"
  14. #import "NSObject+RACDeallocating.h"
  15. #import "NSObject+RACDescription.h"
  16. @implementation UIControl (RACSignalSupport)
  17. - (RACSignal *)rac_signalForControlEvents:(UIControlEvents)controlEvents {
  18. @weakify(self);
  19. return [[RACSignal
  20. createSignal:^(id<RACSubscriber> subscriber) {
  21. @strongify(self);
  22. [self addTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents];
  23. RACDisposable *disposable = [RACDisposable disposableWithBlock:^{
  24. [subscriber sendCompleted];
  25. }];
  26. [self.rac_deallocDisposable addDisposable:disposable];
  27. return [RACDisposable disposableWithBlock:^{
  28. @strongify(self);
  29. [self.rac_deallocDisposable removeDisposable:disposable];
  30. [self removeTarget:subscriber action:@selector(sendNext:) forControlEvents:controlEvents];
  31. }];
  32. }]
  33. setNameWithFormat:@"%@ -rac_signalForControlEvents: %lx", RACDescription(self), (unsigned long)controlEvents];
  34. }
  35. @end