// // WXYZ_BindPhoneViewController.m // WXReader // // Created by Andrew on 2018/7/27. // Copyright © 2018年 Andrew. All rights reserved. // #import "WXYZ_BindPhoneViewController.h" #import "TFAreaCodeViewController.h" #import "TFValidationButton.h" #import "UIView+LayoutCallback.h" #import "NSObject+Observer.h" @interface WXYZ_BindPhoneViewController () @property (nonatomic, weak) UITextField *accountTextField; @property (nonatomic, weak) UITextField *codeTextField; @property (nonatomic, weak) TFValidationButton *sendCodeButton; @property (nonatomic, weak) UIButton *loginButton; @end @implementation WXYZ_BindPhoneViewController - (void)viewDidLoad { [super viewDidLoad]; [self initialize]; [self createSubviews]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self setStatusBarDefaultStyle]; } #pragma mark - 初始化 - (void)initialize { [self setNavigationBarTitle:TFLocalizedString(@"绑定手机号")]; self.view.backgroundColor = kWhiteColor; } #pragma mark - UI - (void)createSubviews { UIView *leftView = ({ UIView *leftView = [[UIView alloc] init]; leftView.backgroundColor = kWhiteColor; UILabel *zoneLabel = [[UILabel alloc] init]; zoneLabel.backgroundColor = kWhiteColor; zoneLabel.textColor = kBlackColor; zoneLabel.font = kFont18; zoneLabel.text = [NSString stringWithFormat:@"%@%@", @"+", TFSystemInfoManager.zoneNumber]; [leftView addSubview:zoneLabel]; [zoneLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.centerY.equalTo(leftView); }]; UIImageView *downImageView = [[UIImageView alloc] init]; downImageView.backgroundColor = kWhiteColor; downImageView.image = [[UIImage imageNamed:@"public_dropDown"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [leftView addSubview:downImageView]; [downImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(zoneLabel.mas_right).offset(kQuarterMargin); make.centerY.equalTo(zoneLabel); make.width.height.mas_equalTo(15.0); }]; WS(weakSelf) [leftView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithActionBlock:^(id _Nonnull sender) { TFAreaCodeViewController *vc = [[TFAreaCodeViewController alloc] init]; vc.areaCodeBlock = ^(NSString * _Nonnull areaCode) { TFSystemInfoManager.zoneNumber = areaCode; zoneLabel.text = [NSString stringWithFormat:@"%@%@", @"+", TFSystemInfoManager.zoneNumber]; }; [weakSelf.navigationController pushViewController:vc animated:YES]; }]]; leftView; }); [self.view addSubview:leftView]; leftView.frameBlock = ^(UIView * _Nonnull view) { [view addBorderLineWithBorderWidth:1.0 borderColor:kGrayLineColor cornerRadius:0.0 borderType:UIBorderSideTypeBottom]; }; CGFloat width = SCREEN_WIDTH - 4 * kMargin; CGFloat height = kGeometricWidth(width, 61.0, 334.0); [leftView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view).offset(2 * kMargin); make.top.equalTo(self.view).offset(PUB_NAVBAR_HEIGHT + kLineX(40.0)); make.size.mas_equalTo(CGSizeMake(90.0, height)); }]; UITextField *accountTextField = ({ UITextField *accountTextField = [[UITextField alloc] init]; self.accountTextField = accountTextField; accountTextField.backgroundColor = [UIColor whiteColor]; accountTextField.font = kFont16; accountTextField.clearButtonMode = UITextFieldViewModeWhileEditing; accountTextField.textColor = kBlackColor; [accountTextField addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged]; accountTextField.keyboardType = UIKeyboardTypeNumberPad; accountTextField.placeholder = TFLocalizedString(@"手机号"); accountTextField.frameBlock = ^(UIView * _Nonnull view) { [view addBorderLineWithBorderWidth:kCellLineHeight borderColor:kGrayLineColor cornerRadius:0 borderType:UIBorderSideTypeBottom]; }; accountTextField; }); [self.view addSubview:accountTextField]; [accountTextField mas_makeConstraints:^(MASConstraintMaker *make) { if (leftView.hidden) { make.left.equalTo(leftView); } else { make.left.equalTo(leftView.mas_right); } make.top.height.equalTo(leftView); make.right.equalTo(self.view).offset(-2 * kMargin); }]; NSString *maxText = [NSString stringWithFormat:@"(%@)%@", @"59", TFLocalizedString(@"后重新发送")]; CGFloat maxWidth = [TFViewHelper getDynamicWidthWithLabelFont:kMainFont labelHeight:height labelText:maxText maxWidth:SCREEN_WIDTH / 2.0 - 50.0]; UIView *rightView = ({ UIView *rightView = [[UIView alloc] init]; TFValidationButton *sendCodeButton = [[TFValidationButton alloc] initWithFrame:CGRectZero identify:@"login_timer"]; self.sendCodeButton = sendCodeButton; sendCodeButton.enabled = NO; [sendCodeButton.titleLabel setFont:kMainFont]; sendCodeButton.titleLabel.textAlignment = NSTextAlignmentCenter; [sendCodeButton setTitleColor:kRedColor forState:UIControlStateNormal]; [sendCodeButton setTitleColor:kColorRGB(199, 199, 205) forState:UIControlStateDisabled]; [sendCodeButton addTarget:self action:@selector(sendCodeEvent:) forControlEvents:UIControlEventTouchUpInside]; [rightView addSubview:sendCodeButton]; [sendCodeButton mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(rightView); make.height.mas_equalTo(sendCodeButton.intrinsicContentSize.height); make.width.mas_equalTo(maxWidth); }]; UIView *lineView = [[UIView alloc] init]; lineView.backgroundColor = kGrayLineColor; [rightView addSubview:lineView]; [lineView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(rightView); make.size.mas_equalTo(CGSizeMake(1.0, kMargin)); make.centerY.equalTo(rightView); }]; rightView; }); [self.view addSubview:rightView]; rightView.frameBlock = ^(UIView * _Nonnull view) { [view addBorderLineWithBorderWidth:1.0 borderColor:kGrayLineColor cornerRadius:0.0 borderType:UIBorderSideTypeBottom]; }; [rightView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.height.equalTo(accountTextField); make.top.equalTo(accountTextField.mas_bottom).offset(kMargin); make.width.mas_equalTo(maxWidth + kMargin); }]; UITextField *codeTextField = ({ UITextField *codeTextField = [[UITextField alloc] init]; self.codeTextField = codeTextField; codeTextField.backgroundColor = accountTextField.backgroundColor; codeTextField.keyboardType = UIKeyboardTypeNumberPad; codeTextField.font = accountTextField.font; codeTextField.clearButtonMode = UITextFieldViewModeWhileEditing; codeTextField.textColor = accountTextField.textColor; codeTextField.placeholder = TFLocalizedString(@"验证码"); [codeTextField addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged]; codeTextField.frameBlock = ^(UIView * _Nonnull view) { [view addBorderLineWithBorderWidth:kCellLineHeight borderColor:kGrayLineColor cornerRadius:0 borderType:UIBorderSideTypeBottom]; }; codeTextField; }); [self.view addSubview:codeTextField]; [codeTextField mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(leftView); make.top.equalTo(rightView); make.height.equalTo(accountTextField); make.right.equalTo(rightView.mas_left); }]; UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeSystem]; self.loginButton = loginButton; loginButton.titleLabel.font = kFont15; [loginButton setTitleColor:kWhiteColor forState:UIControlStateNormal]; [loginButton setTitleColor:kGrayTextColor forState:UIControlStateDisabled]; [loginButton setTitle:TFLocalizedString(@"绑定") forState:UIControlStateNormal]; [loginButton addObserver:KEY_PATH(loginButton, enabled) complete:^(UIButton * _Nonnull obj, id _Nullable oldVal, id _Nullable newVal) { obj.backgroundColor = [newVal boolValue] ? kRedColor : kColorRGB(229, 230, 231); }]; loginButton.enabled = NO; loginButton.frameBlock = ^(UIButton * _Nonnull button) { button.layer.cornerRadius = (CGRectGetWidth(button.bounds) + CGRectGetHeight(button.bounds)) * 0.058; }; [loginButton addTarget:self action:@selector(bindPhone) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:loginButton]; [loginButton mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view).offset(2 * kMargin); make.right.equalTo(self.view).offset(-2 * kMargin); make.top.equalTo(codeTextField.mas_bottom).offset(is_iPhone4 || is_iPhone5 ? 40 : 60); make.height.equalTo(loginButton.mas_width).multipliedBy(44.0 / 334.0); }]; } #pragma mark - Event - (void)textDidChange:(UITextField *)textField { if (self.sendCodeButton.countdownState == NO) { self.sendCodeButton.enabled = (self.accountTextField.text.length > 0); } self.loginButton.enabled = (self.accountTextField.text.length > 0 && self.codeTextField.text.length > 0); } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } #pragma mark - 网络请求 - (void)sendCodeEvent:(TFValidationButton *)button { NSDictionary *params = @{ @"mobile" : [TFSystemInfoManager.zoneNumber stringByAppendingString:self.accountTextField.text] }; WS(weakSelf) [TFNetworkTools POST:Send_Verification_Code parameters:params model:nil success:^(BOOL isSuccess, id _Nullable t_model, TFNetworkRequestModel *requestModel) { if (isSuccess) { [button startTiming]; [TFPromptManager showPromptViewWithStatus:TFPromptStatusSuccess promptTitle:TFLocalizedString(@"验证码已发送")]; [weakSelf.codeTextField becomeFirstResponder]; } else { [TFPromptManager showPromptViewWithStatus:TFPromptStatusError promptTitle:requestModel.msg ?: TFLocalizedString(@"发送失败")]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [TFPromptManager showPromptWithError:error defaultText:TFLocalizedString(@"发送失败")]; }]; } - (void)bindPhone { self.view.userInteractionEnabled = NO; NSDictionary *params = @{ @"mobile" : [TFSystemInfoManager.zoneNumber stringByAppendingString:self.accountTextField.text], @"code" : self.codeTextField.text }; WS(weakSelf) [TFNetworkTools POST:Phone_Binding parameters:params model:TFUserInfoManager.class success:^(BOOL isSuccess, TFUserInfoManager * _Nullable t_model, TFNetworkRequestModel *requestModel) { if (isSuccess) { [TFPromptManager showPromptViewWithStatus:TFPromptStatusSuccess promptTitle:TFLocalizedString(@"绑定成功")]; !weakSelf.completionBlock ?: weakSelf.completionBlock(); } else { [TFPromptManager showPromptViewWithStatus:TFPromptStatusError promptTitle:requestModel.msg]; weakSelf.view.userInteractionEnabled = YES; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { [TFPromptManager showPromptWithError:error defaultText:nil]; weakSelf.view.userInteractionEnabled = YES; }]; } @end