You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
267 lines
12 KiB
267 lines
12 KiB
4 years ago
|
//
|
||
|
// 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<UITouch *> *)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
|