2016-04-25 8 views
0
RAC(self.balanceLabel,text) = RACObserve(self.viewModel, balance); // balanceLabel is a UILabel,that is ofcourse work 
RAC(self.supplierNameButton.titleLabel.text) = RACObserve(self.viewModel, supplierName); // that is not work,i think this is I don't use the - setTitle:forState: method 

Meine Frage ist: Wie kann ich Reactivecocoa Bindung des Lieferanten View-Modell auf den UIButon Text seines UIControlStateNormalBindung Reactivecocoa UIButton Titel

Antwort

0

Der Titel in einem Abonnement-Block aktualisiert werden muss

@weakify(self) 
[RACObserve(self.viewModel, supplierName) 
    subscribeNext:^(NSString *supplierName) { 
     @strongify(self) 
     [self.supplierNameButton setTitle:supplierName forState:UIControlStateNormal]; 
    }]; 

Durch das Abonnement einer Kategorie-Methode auf UIButton

bewegen
- (void)setTitleSignal:(RACSignal *)titleSignal forState:(UIControlState)state { 
    @weakify(self) 
    [titleSignal subscribeNext:^(NSString *title) { 
     @strongify(self) 
     [self setTitle:title forState:state]; 
    }]; 

}

die Bindung kann ein bisschen sauberer als

[self.supplierNameButton setTitleSignal:RACObserve(self.viewMode, supplierName) forState:UIControlStateNormal]; 
1

Leider ausgedrückt werden, arbeiten Bindungen nur für Eigenschaften und Text der Schaltfläche nur aktualisiert setTitle:forState Methode verwendet werden kann.

Aber es gibt eine Lösung: Sie rac_liftSelector:withSignalsFromArray Methode verwenden können, die hilfreich ist, wenn Sie nicht mit Abonnements zu verwirren wollen (und weakify/strongify):

[self.supplierNameButtonButton rac_liftSelector:@selector(setTitle:forState:) withSignalsFromArray:@[RACObserve(self.viewModel, supplierName), [RACSignal return:@(UIControlStateNormal)]]];

Verwandte Themen