MVVM双向绑定

@implementation MRCLoginViewController

- (void)bindViewModel {

[super bindViewModel];
@weakify(self)

[RACObserve(self.viewModel, avatarURL) subscribeNext:^(NSURL *avatarURL) {

@strongify(self)
[self.avatarButton sd_setImageWithURL:avatarURL forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"default-avatar"]];

}];
RAC(self.viewModel, username)  = self.usernameTextField.rac_textSignal;

RAC(self.viewModel, password)  = self.passwordTextField.rac_textSignal;

RAC(self.loginButton, enabled) = self.viewModel.validLoginSignal;

[[self.loginButton

rac_signalForControlEvents:UIControlEventTouchUpInside]

subscribeNext:^(id x) {
@strongify(self)

[self.viewModel.loginCommand execute:nil];

}];

[[self.browserLoginButton

rac_signalForControlEvents:UIControlEventTouchUpInside]

subscribeNext:^(id x) {

@strongify(self)

NSString *message = [NSString stringWithFormat:@"“%@” wants to open “Safari”", MRC_APP_NAME];

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:message                                                                                                    preferredStyle:UIAlertControllerStyleAlert];

[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:NULL]];

[alertController addAction:[UIAlertAction actionWithTitle:@"Open" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

@strongify(self)

[self.viewModel.browserLoginCommand execute:nil];

}]];

[self presentViewController:alertController animated:YES completion:NULL];

}];

}

@end

你可能感兴趣的:(MVVM双向绑定)