Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Signal from tap on UIButton in Reactive Cocoa 4

How can I create a Signal from a tap on a UIButton?

So far I tried to use target/action, but have come to think that there might be an easier way.

In an article of Colin Eberhardt, it is stated that Signals are appropriate for UI actions. But when I tried to make my around with target/action, I needed to create a CocoaAction was ultimately initialised with a SignalProducer.

What I want is some Signal that emits its next events with every user tap. I then want to transform this Signal to read from UITextFields and carry on those values to use them in my application.

like image 865
nburk Avatar asked Dec 10 '15 16:12

nburk


2 Answers

Using convenience functions from this gist by @NachoSoto, I was able to achieve this quite simply with signalForControlEvents(UIControlEvents.TouchUpInside) :

self.startButton
      .signalForControlEvents(UIControlEvents.TouchUpInside)
      .map { _ in (self.name1TextField.text!, self.name2TextField.text!)}
      .observe { event in
          if let names = event.value {
              print("received names \(names)")
          }
       }
like image 73
nburk Avatar answered Sep 21 '22 14:09

nburk


 self.startButton
     .rac_signalForControlEvents(UIControlEvents.TouchUpInside)
     .subscribeNext { event in
         if let names = event.value {
            print("received names \(names)")
         }
     }
like image 22
pcwang Avatar answered Sep 22 '22 14:09

pcwang