PasswordLoginView.swift 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. //
  2. // PasswordLoginView.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/4/17.
  6. // Copyright © 2019 南鑫林. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. class PasswordLoginView: BaseView {
  12. /// 手机号
  13. var phoneNumber : String = ""
  14. /// 密码
  15. var password : String = ""
  16. typealias LoginBlock = (_ phoneNumber : String ,_ sms : String) -> Void
  17. var loginBlock : LoginBlock?
  18. typealias ForgetPasswordBlock = () -> Void
  19. var forgetPasswordBlock : ForgetPasswordBlock?
  20. override func setupViews() {
  21. addSubview(bindPhoneNumberLabel)
  22. addSubview(phoneNumberBgView)
  23. phoneNumberBgView.addSubview(linePhoneNumberLabel)
  24. phoneNumberBgView.addSubview(phoneAreaCodeLabel)
  25. phoneNumberBgView.addSubview(phoneNumberTextField)
  26. addSubview(passwordBgView)
  27. passwordBgView.addSubview(linesmsLabel)
  28. passwordBgView.addSubview(saftButton)
  29. passwordBgView.addSubview(passwordTextField)
  30. addSubview(loginButton)
  31. addSubview(forgetPasswordButton)
  32. }
  33. override func setupLayouts() {
  34. bindPhoneNumberLabel.snp.makeConstraints { (make) in
  35. make.top.equalToSuperview().offset(kScaleValue(value: 75))
  36. make.left.equalToSuperview().offset(kScaleValue(value: 38))
  37. }
  38. phoneNumberBgView.snp.makeConstraints { (make) in
  39. make.left.equalToSuperview().offset(kScaleValue(value: 38))
  40. make.right.equalToSuperview().offset(kScaleValue(value: -38))
  41. make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(kScaleValue(value: 50))
  42. make.height.equalTo(kScaleValue(value: 48))
  43. }
  44. linePhoneNumberLabel.snp.makeConstraints { (make) in
  45. make.left.right.bottom.equalToSuperview()
  46. make.height.equalTo(0.5)
  47. }
  48. phoneAreaCodeLabel.snp.makeConstraints { (make) in
  49. make.top.equalToSuperview().offset(kScaleValue(value: 6))
  50. make.left.equalToSuperview().offset(kScaleValue(value: 4))
  51. make.bottom.equalToSuperview()
  52. }
  53. phoneNumberTextField.snp.makeConstraints { (make) in
  54. make.left.equalTo(phoneAreaCodeLabel.snp.right).offset(kScaleValue(value: 30))
  55. make.top.bottom.equalTo(phoneAreaCodeLabel)
  56. make.width.equalTo(kScreenWidth-kScaleValue(value: 76+34+30))
  57. }
  58. passwordBgView.snp.makeConstraints { (make) in
  59. make.left.height.right.equalTo(phoneNumberBgView)
  60. make.top.equalTo(phoneNumberBgView.snp.bottom)
  61. }
  62. linesmsLabel.snp.makeConstraints { (make) in
  63. make.left.right.bottom.equalToSuperview()
  64. make.height.equalTo(0.5)
  65. }
  66. saftButton.snp.makeConstraints { (make) in
  67. make.bottom.equalToSuperview().offset(kScaleValue(value: -4))
  68. make.height.equalTo(kScaleValue(value: 30))
  69. make.width.equalTo(kScaleValue(value: 18))
  70. make.right.equalToSuperview().offset(kScaleValue(value: -4))
  71. }
  72. passwordTextField.snp.makeConstraints { (make) in
  73. make.centerY.height.equalTo(saftButton)
  74. make.left.equalTo(phoneAreaCodeLabel)
  75. make.right.equalTo(saftButton.snp.left).offset(-10)
  76. }
  77. loginButton.snp.makeConstraints { (make) in
  78. make.top.equalTo(passwordBgView.snp.bottom).offset(kScaleValue(value: 35))
  79. make.height.equalTo(kScaleValue(value:44))
  80. make.left.equalToSuperview().offset(kScaleValue(value: 38))
  81. make.right.equalToSuperview().offset(kScaleValue(value: -38))
  82. }
  83. forgetPasswordButton.snp.makeConstraints { (make) in
  84. make.top.equalTo(loginButton.snp.bottom).offset(20)
  85. make.centerX.equalToSuperview()
  86. }
  87. }
  88. private lazy var bindPhoneNumberLabel: UILabel = {
  89. let bindPhoneNumberLabel = UILabel()
  90. bindPhoneNumberLabel.text = "手机密码登录"
  91. bindPhoneNumberLabel.textColor = k333333Color
  92. bindPhoneNumberLabel.font = kScaleBoldFont22
  93. return bindPhoneNumberLabel
  94. }()
  95. private lazy var phoneNumberBgView: UIView = {
  96. let phoneNumberBgView = UIView()
  97. return phoneNumberBgView
  98. }()
  99. private lazy var linePhoneNumberLabel: UILabel = {
  100. let linePhoneNumberLabel = UILabel()
  101. linePhoneNumberLabel.backgroundColor = ke6e6e6Color
  102. return linePhoneNumberLabel
  103. }()
  104. private lazy var phoneAreaCodeLabel: UILabel = {
  105. let phoneAreaCodeLabel = UILabel()
  106. phoneAreaCodeLabel.text = "+86"
  107. phoneAreaCodeLabel.textColor = k333333Color
  108. phoneAreaCodeLabel.font = kScaleRegularFont16
  109. phoneAreaCodeLabel.sizeToFit()
  110. return phoneAreaCodeLabel
  111. }()
  112. private lazy var phoneNumberTextField : UITextField = {
  113. let phoneNumberTextField = UITextField()
  114. phoneNumberTextField.placeholder = "手机号码"
  115. phoneNumberTextField.borderStyle = .none
  116. phoneNumberTextField.textColor = k666666Color
  117. phoneNumberTextField.font = kScaleRegularFont16
  118. phoneNumberTextField.clearButtonMode = .whileEditing
  119. phoneNumberTextField.sizeToFit()
  120. phoneNumberTextField.keyboardType = .numberPad
  121. phoneNumberTextField.tintColor = kThemeColor
  122. phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
  123. self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
  124. self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
  125. self?.observableString()
  126. }).disposed(by: disposeBag)
  127. return phoneNumberTextField
  128. }()
  129. private lazy var passwordBgView: UIView = {
  130. let passwordBgView = UIView()
  131. return passwordBgView
  132. }()
  133. private lazy var linesmsLabel: UILabel = {
  134. let linesmsLabel = UILabel()
  135. linesmsLabel.backgroundColor = ke6e6e6Color
  136. return linesmsLabel
  137. }()
  138. private lazy var saftButton: UIButton = {
  139. let saftButton = UIButton(type: UIButton.ButtonType.custom)
  140. saftButton.setImage(kImage(name: "login_show"), for: UIControl.State.normal)
  141. saftButton.setImage(kImage(name: "login_show_pressed"), for: UIControl.State.selected)
  142. saftButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  143. saftButton.isSelected = !saftButton.isSelected
  144. self?.passwordTextField.isSecureTextEntry = saftButton.isSelected
  145. }).disposed(by: disposeBag)
  146. return saftButton
  147. }()
  148. private lazy var passwordTextField : UITextField = {
  149. let passwordTextField = UITextField()
  150. passwordTextField.placeholder = "请输入密码"
  151. passwordTextField.borderStyle = .none
  152. passwordTextField.textColor = k666666Color
  153. passwordTextField.font = kScaleRegularFont16
  154. passwordTextField.sizeToFit()
  155. passwordTextField.isSecureTextEntry = false
  156. passwordTextField.clearButtonMode = .whileEditing
  157. passwordTextField.tintColor = kThemeColor
  158. passwordTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
  159. self?.passwordTextField.text = String(text?.prefix(16) ?? "") as String
  160. self?.password = self?.passwordTextField.text ?? ""
  161. self?.observableString()
  162. }).disposed(by: disposeBag)
  163. return passwordTextField
  164. }()
  165. private lazy var loginButton: UIButton = {
  166. let loginButton = UIButton(type: UIButton.ButtonType.custom)
  167. loginButton.setTitle("登录", for: UIControl.State.normal)
  168. loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  169. loginButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
  170. loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
  171. loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
  172. loginButton.titleLabel?.font = kScaleRegularFont18
  173. loginButton.cornerRadius = kScaleValue(value: 22)
  174. loginButton.masksToBounds = true
  175. loginButton.isEnabled = false
  176. loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  177. if let loginBlock = self?.loginBlock {
  178. loginBlock((self?.phoneNumber)!,(self?.password)!)
  179. }
  180. }).disposed(by: disposeBag)
  181. return loginButton
  182. }()
  183. private lazy var forgetPasswordButton: UIButton = {
  184. let forgetPasswordButton = UIButton(type: UIButton.ButtonType.custom)
  185. forgetPasswordButton.setTitle("忘记密码", for: UIControl.State.normal)
  186. forgetPasswordButton.setTitleColor(k1C2443Color, for: UIControl.State.normal)
  187. forgetPasswordButton.titleLabel?.font = kScaleRegularFont14
  188. forgetPasswordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  189. if let forgetPasswordBlock = self?.forgetPasswordBlock {
  190. forgetPasswordBlock()
  191. }
  192. }).disposed(by: disposeBag)
  193. return forgetPasswordButton
  194. }()
  195. func observableString() {
  196. Observable.combineLatest(Observable.just(phoneNumber), Observable.just(password)) { (textValue1, textValue2) -> Bool in
  197. let textValue1 = String(textValue1.prefix(11)) as String
  198. let textValue2 = String(textValue2.prefix(16)) as String
  199. let isSuccess = (textValue1.count == 11) && (textValue2.count >= 6) && (textValue2.count <= 16)
  200. return isSuccess
  201. }.subscribe(onNext: {
  202. [weak self] isEmpty in
  203. self?.loginButton.isEnabled = isEmpty
  204. }).disposed(by: self.disposeBag)
  205. }
  206. }