// // PasswordLoginView.swift // RainbowPlanet // // Created by 南鑫林 on 2019/4/17. // Copyright © 2019 南鑫林. All rights reserved. // import UIKit import RxSwift import RxCocoa import SwiftyMediator class PasswordLoginView: BaseView { /// 手机号 var phoneNumber : String = "" /// 密码 var password : String = "" typealias LoginBlock = (_ phoneNumber : String ,_ password : String) -> Void var loginBlock : LoginBlock? typealias ForgetPasswordBlock = () -> Void var forgetPasswordBlock : ForgetPasswordBlock? override func setupViews() { addSubview(bgImageView) addSubview(bindPhoneNumberLabel) addSubview(phoneNumberBgView) phoneNumberBgView.addSubview(v_lineLabel) phoneNumberBgView.addSubview(phoneAreaCodeLabel) phoneNumberBgView.addSubview(phoneNumberTextField) addSubview(passwordBgView) passwordBgView.addSubview(saftButton) passwordBgView.addSubview(passwordTextField) addSubview(loginButton) addSubview(forgetPasswordButton) addSubview(agreementLabel) } override func setupLayouts() { bgImageView.snp.makeConstraints { (make) in make.edges.equalToSuperview() } bindPhoneNumberLabel.snp.makeConstraints { (make) in make.top.left.equalToSuperview().offset(30) } phoneNumberBgView.snp.makeConstraints { (make) in make.left.equalToSuperview().offset(30) make.right.equalToSuperview().offset(-30) make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(60) make.height.equalTo(44) } phoneAreaCodeLabel.snp.makeConstraints { (make) in make.top.bottom.equalToSuperview() make.left.equalToSuperview() make.width.equalTo(67.5) } v_lineLabel.snp.makeConstraints { (make) in make.left.equalTo(phoneAreaCodeLabel.snp.right) make.width.equalTo(0.5) make.height.equalTo(10) make.centerY.equalToSuperview() } phoneNumberTextField.snp.makeConstraints { (make) in make.left.equalTo(v_lineLabel.snp.right).offset(10) make.top.bottom.equalToSuperview() make.right.equalToSuperview().offset(-30) } passwordBgView.snp.makeConstraints { (make) in make.top.equalTo(phoneNumberBgView.snp.bottom).offset(16) make.left.right.height.equalTo(phoneNumberBgView) } saftButton.snp.makeConstraints { (make) in make.bottom.top.equalToSuperview() make.width.equalTo(24) make.right.equalToSuperview().offset(-18) } passwordTextField.snp.makeConstraints { (make) in make.left.equalToSuperview().offset(30) make.right.equalTo(saftButton.snp.left).offset(10) make.top.bottom.equalToSuperview() } forgetPasswordButton.snp.makeConstraints { (make) in make.top.equalTo(passwordBgView.snp.bottom).offset(12) make.right.equalTo(passwordBgView) } loginButton.snp.makeConstraints { (make) in make.bottom.equalTo(-75) make.height.equalTo(48) make.left.equalToSuperview().offset(30) make.right.equalToSuperview().offset(-30) } agreementLabel.snp.makeConstraints { (make) in make.top.equalTo(loginButton.snp.bottom).offset(12) make.centerX.equalToSuperview() } } override func setupData() { phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String self?.phoneNumber = self?.phoneNumberTextField.text ?? "" self?.observableString() }).disposed(by: disposeBag) passwordTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in TextLimitTool.restrictionInputTextField((self?.passwordTextField)!, maxNumber: 16) self?.password = self?.passwordTextField.text ?? "" self?.observableString() }).disposed(by: disposeBag) loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in if let loginBlock = self?.loginBlock { loginBlock((self?.phoneNumber)!,(self?.password)!) } }).disposed(by: disposeBag) forgetPasswordButton.rx.tap.subscribe(onNext: { [weak self] (data) in if let forgetPasswordBlock = self?.forgetPasswordBlock { forgetPasswordBlock() } }).disposed(by: disposeBag) agreementLabel.addClickText("服务和隐私条款", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:k333333Color], transmitBody: nil) { (data) in Mediator.push(H5RouterModuleType.pushContentId6) } agreementLabel.addClickText("隐私条款", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:k333333Color], transmitBody: nil) { (data) in Mediator.push(H5RouterModuleType.pushContentId11) } } func observableString() { Observable.combineLatest(Observable.just(phoneNumber), Observable.just(password)) { (textValue1, textValue2) -> Bool in let textValue1 = String(textValue1.prefix(11)) as String let textValue2 = String(textValue2.prefix(16)) as String let isSuccess = (textValue1.count == 11) && (textValue2.count >= 6) && (textValue2.count <= 16) return isSuccess }.subscribe(onNext: { [weak self] isEmpty in self?.loginButton.isEnabled = isEmpty }).disposed(by: self.disposeBag) } lazy var bgImageView: UIImageView = { let bgImageView = UIImageView() bgImageView.image = kImage(name: "login_pic_bg") bgImageView.isUserInteractionEnabled = true bgImageView.contentMode = .scaleAspectFill bgImageView.clipsToBounds = true return bgImageView }() private lazy var bindPhoneNumberLabel: UILabel = { let bindPhoneNumberLabel = UILabel() bindPhoneNumberLabel.text = "密码登录" bindPhoneNumberLabel.textColor = k333333Color bindPhoneNumberLabel.font = kBoldFont28 return bindPhoneNumberLabel }() private lazy var phoneNumberBgView: UIView = { let phoneNumberBgView = UIView() phoneNumberBgView.backgroundColor = kf7f8faColor.withAlphaComponent(0.8) phoneNumberBgView.cornerRadius = 22 phoneNumberBgView.masksToBounds = true return phoneNumberBgView }() lazy var v_lineLabel: UILabel = { let v_lineLabel = UILabel() v_lineLabel.backgroundColor = kDDDDDDColor return v_lineLabel }() private lazy var phoneAreaCodeLabel: UILabel = { let phoneAreaCodeLabel = UILabel() phoneAreaCodeLabel.text = "+86" phoneAreaCodeLabel.textColor = k333333Color phoneAreaCodeLabel.font = kMediumFont16 phoneAreaCodeLabel.sizeToFit() phoneAreaCodeLabel.textAlignment = .center return phoneAreaCodeLabel }() private lazy var phoneNumberTextField : UITextField = { let phoneNumberTextField = UITextField() phoneNumberTextField.placeholder = "请输入手机号码" phoneNumberTextField.borderStyle = .none phoneNumberTextField.textColor = k666666Color phoneNumberTextField.font = kRegularFont15 phoneNumberTextField.clearButtonMode = .whileEditing phoneNumberTextField.sizeToFit() phoneNumberTextField.keyboardType = .numberPad phoneNumberTextField.tintColor = kThemeColor return phoneNumberTextField }() private lazy var passwordBgView: UIView = { let passwordBgView = UIView() passwordBgView.backgroundColor = kf7f8faColor.withAlphaComponent(0.8) passwordBgView.cornerRadius = 22 passwordBgView.masksToBounds = true return passwordBgView }() private lazy var saftButton: UIButton = { let saftButton = UIButton(type: UIButton.ButtonType.custom) saftButton.setImage(kImage(name: "login_show"), for: UIControl.State.normal) saftButton.setImage(kImage(name: "login_show_pressed"), for: UIControl.State.selected) saftButton.rx.tap.subscribe(onNext: { [weak self] (data) in saftButton.isSelected = !saftButton.isSelected self?.passwordTextField.isSecureTextEntry = saftButton.isSelected }).disposed(by: disposeBag) return saftButton }() private lazy var passwordTextField : UITextField = { let passwordTextField = UITextField() passwordTextField.placeholder = "请输入密码" passwordTextField.borderStyle = .none passwordTextField.textColor = k666666Color passwordTextField.font = kRegularFont15 passwordTextField.sizeToFit() passwordTextField.isSecureTextEntry = false // passwordTextField.clearButtonMode = .whileEditing passwordTextField.tintColor = kThemeColor return passwordTextField }() private lazy var loginButton: UIButton = { let loginButton = UIButton(type: UIButton.ButtonType.custom) loginButton.setTitle("登录", for: UIControl.State.normal) loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal) loginButton.setTitleColor(kffffffColor, for: UIControl.State.disabled) loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled) loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal) loginButton.titleLabel?.font = kRegularFont16 loginButton.cornerRadius = 24 loginButton.masksToBounds = true loginButton.isEnabled = false return loginButton }() private lazy var agreementLabel: FMLinkLabel = { let agreementLabel = FMLinkLabel() agreementLabel.numberOfLines = 0 agreementLabel.textColor = kbbbbbbColor agreementLabel.font = kRegularFont12 agreementLabel.isUserInteractionEnabled = true agreementLabel.text = "登录即表示你已阅读并同意 由你用户协议 和 隐私条款" agreementLabel.textAlignment = .center return agreementLabel }() private lazy var forgetPasswordButton: UIButton = { let forgetPasswordButton = UIButton(type: UIButton.ButtonType.custom) forgetPasswordButton.setTitle("忘记密码?", for: UIControl.State.normal) forgetPasswordButton.setTitleColor(k999999Color, for: UIControl.State.normal) forgetPasswordButton.titleLabel?.font = kRegularFont14 return forgetPasswordButton }() }