2017-08-22 1 views
0

Ich bin neu in der reaktiven Programmierung und Bond-Framework speziell. Ich weiß, dass ich in meinem grundlegenden Verständnis dieser Programmiertechnik Dinge falsch mache. Dies ist die Situation:Binding Textfeld Text zu aktivieren Schaltfläche nicht funktioniert

Ich habe eine UITextView und eine "genehmigen" UIButton. Ich möchte die Genehmigungsschaltfläche nur aktiviert werden, wenn der Text in der Textansicht nicht Null ist. Ich habe versucht, diese Codezeilen in meine viewDidLoad Methode in meinem ViewController hinzuzufügen.

textView.reactive.text.observeNext{(text) in 
     self.message = text 
     print(text) 
    } 
    textView.reactive.text.map { $0 != nil}.bind(to: approveButtonOutlet.reactive.isEnabled) 

Die erste Aktion funktioniert (der Text wird erfolgreich bei jeder Eingabeänderung gedruckt). Die zweite funktioniert nicht, die Schaltfläche ist aktiviert, wenn der Text nicht null ist und wenn es ist.

Jede Hilfe wird geschätzt.

Antwort

0

ich das Problem war, dass ich einen Platzhalter in meinem Textview hatte , die verhindert, dass der Text wirklich Null ist. Also, was schließlich tat ich, ist dies:

textView.reactive.text.map { 
     if $0 == placeholder { 
      return false 
     } else if $0 != nil { 
      return $0!.characters.count > 0 
     } else{ 
      return false 
     } 
     }.bind(to: approveButtonOutlet.reactive.isEnabled) 
1

Sie können wie versuchen

RAC(self.approveButtonOutlet, enabled) = [self.textView.rac_textSignal map:^id(NSString *text) { 
     return @(text.length > 0); 
    }]; 

Ich bin nicht sicher, wie es in schnellen 3 sein wird versuchen, wie

RAC(self.approveButtonOutlet, enabled) = self.textView.rac_textSignal.map({(text: String) -> void in 
    return (text.length > 0) 
}) 
+0

Danke für die Antwort, ich verstehe nicht, was RAC ist, und es ist wichtiger für mich wirklich zu verstehen, was mit meiner Lösung falsch ist, dann ein anderes bekommen, da Ich versuche, den Rahmen zu lernen. Ich gebe dir Daumen hoch für die Anstrengung, aber das Lösen war auch einfach, indem ich eine if-Bedingung auf der Knopfaktion verwendete – Eyzuky

Verwandte Themen