PasswordLoginView.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. import SwiftyMediator
  12. class PasswordLoginView: BaseView {
  13. /// 手机号
  14. var phoneNumber : String = ""
  15. /// 密码
  16. var password : String = ""
  17. typealias LoginBlock = (_ phoneNumber : String ,_ password : String) -> Void
  18. var loginBlock : LoginBlock?
  19. typealias ForgetPasswordBlock = () -> Void
  20. var forgetPasswordBlock : ForgetPasswordBlock?
  21. override func setupViews() {
  22. addSubview(bgImageView)
  23. addSubview(bindPhoneNumberLabel)
  24. addSubview(phoneNumberBgView)
  25. phoneNumberBgView.addSubview(v_lineLabel)
  26. phoneNumberBgView.addSubview(phoneAreaCodeLabel)
  27. phoneNumberBgView.addSubview(phoneNumberTextField)
  28. addSubview(passwordBgView)
  29. passwordBgView.addSubview(saftButton)
  30. passwordBgView.addSubview(passwordTextField)
  31. addSubview(loginButton)
  32. addSubview(forgetPasswordButton)
  33. addSubview(agreementLabel)
  34. }
  35. override func setupLayouts() {
  36. bgImageView.snp.makeConstraints { (make) in
  37. make.edges.equalToSuperview()
  38. }
  39. bindPhoneNumberLabel.snp.makeConstraints { (make) in
  40. make.top.left.equalToSuperview().offset(30)
  41. }
  42. phoneNumberBgView.snp.makeConstraints { (make) in
  43. make.left.equalToSuperview().offset(30)
  44. make.right.equalToSuperview().offset(-30)
  45. make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(60)
  46. make.height.equalTo(44)
  47. }
  48. phoneAreaCodeLabel.snp.makeConstraints { (make) in
  49. make.top.bottom.equalToSuperview()
  50. make.left.equalToSuperview()
  51. make.width.equalTo(67.5)
  52. }
  53. v_lineLabel.snp.makeConstraints { (make) in
  54. make.left.equalTo(phoneAreaCodeLabel.snp.right)
  55. make.width.equalTo(0.5)
  56. make.height.equalTo(10)
  57. make.centerY.equalToSuperview()
  58. }
  59. phoneNumberTextField.snp.makeConstraints { (make) in
  60. make.left.equalTo(v_lineLabel.snp.right).offset(10)
  61. make.top.bottom.equalToSuperview()
  62. make.right.equalToSuperview().offset(-30)
  63. }
  64. passwordBgView.snp.makeConstraints { (make) in
  65. make.top.equalTo(phoneNumberBgView.snp.bottom).offset(16)
  66. make.left.right.height.equalTo(phoneNumberBgView)
  67. }
  68. saftButton.snp.makeConstraints { (make) in
  69. make.bottom.top.equalToSuperview()
  70. make.width.equalTo(24)
  71. make.right.equalToSuperview().offset(-18)
  72. }
  73. passwordTextField.snp.makeConstraints { (make) in
  74. make.left.equalToSuperview().offset(30)
  75. make.right.equalTo(saftButton.snp.left).offset(10)
  76. make.top.bottom.equalToSuperview()
  77. }
  78. forgetPasswordButton.snp.makeConstraints { (make) in
  79. make.top.equalTo(passwordBgView.snp.bottom).offset(12)
  80. make.right.equalTo(passwordBgView)
  81. }
  82. loginButton.snp.makeConstraints { (make) in
  83. make.bottom.equalTo(-75)
  84. make.height.equalTo(48)
  85. make.left.equalToSuperview().offset(30)
  86. make.right.equalToSuperview().offset(-30)
  87. }
  88. agreementLabel.snp.makeConstraints { (make) in
  89. make.top.equalTo(loginButton.snp.bottom).offset(12)
  90. make.centerX.equalToSuperview()
  91. }
  92. }
  93. override func setupData() {
  94. phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
  95. self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
  96. self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
  97. self?.observableString()
  98. }).disposed(by: disposeBag)
  99. passwordTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
  100. TextLimitTool.restrictionInputTextField((self?.passwordTextField)!, maxNumber: 16)
  101. self?.password = self?.passwordTextField.text ?? ""
  102. self?.observableString()
  103. }).disposed(by: disposeBag)
  104. loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  105. if let loginBlock = self?.loginBlock {
  106. loginBlock((self?.phoneNumber)!,(self?.password)!)
  107. }
  108. }).disposed(by: disposeBag)
  109. forgetPasswordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  110. if let forgetPasswordBlock = self?.forgetPasswordBlock {
  111. forgetPasswordBlock()
  112. }
  113. }).disposed(by: disposeBag)
  114. agreementLabel.addClickText("服务和隐私条款", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:k333333Color], transmitBody: nil) {
  115. (data) in
  116. Mediator.push(H5RouterModuleType.pushContentId6)
  117. }
  118. agreementLabel.addClickText("隐私条款", attributeds: [NSAttributedString.Key.font:kRegularFont13 as Any,NSAttributedString.Key.foregroundColor:k333333Color], transmitBody: nil) {
  119. (data) in
  120. Mediator.push(H5RouterModuleType.pushContentId11)
  121. }
  122. }
  123. func observableString() {
  124. Observable.combineLatest(Observable.just(phoneNumber), Observable.just(password)) { (textValue1, textValue2) -> Bool in
  125. let textValue1 = String(textValue1.prefix(11)) as String
  126. let textValue2 = String(textValue2.prefix(16)) as String
  127. let isSuccess = (textValue1.count == 11) && (textValue2.count >= 6) && (textValue2.count <= 16)
  128. return isSuccess
  129. }.subscribe(onNext: {
  130. [weak self] isEmpty in
  131. self?.loginButton.isEnabled = isEmpty
  132. }).disposed(by: self.disposeBag)
  133. }
  134. lazy var bgImageView: UIImageView = {
  135. let bgImageView = UIImageView()
  136. bgImageView.image = kImage(name: "login_pic_bg")
  137. bgImageView.isUserInteractionEnabled = true
  138. bgImageView.contentMode = .scaleAspectFill
  139. bgImageView.clipsToBounds = true
  140. return bgImageView
  141. }()
  142. private lazy var bindPhoneNumberLabel: UILabel = {
  143. let bindPhoneNumberLabel = UILabel()
  144. bindPhoneNumberLabel.text = "密码登录"
  145. bindPhoneNumberLabel.textColor = k333333Color
  146. bindPhoneNumberLabel.font = kBoldFont28
  147. return bindPhoneNumberLabel
  148. }()
  149. private lazy var phoneNumberBgView: UIView = {
  150. let phoneNumberBgView = UIView()
  151. phoneNumberBgView.backgroundColor = kf7f8faColor.withAlphaComponent(0.8)
  152. phoneNumberBgView.cornerRadius = 22
  153. phoneNumberBgView.masksToBounds = true
  154. return phoneNumberBgView
  155. }()
  156. lazy var v_lineLabel: UILabel = {
  157. let v_lineLabel = UILabel()
  158. v_lineLabel.backgroundColor = kDDDDDDColor
  159. return v_lineLabel
  160. }()
  161. private lazy var phoneAreaCodeLabel: UILabel = {
  162. let phoneAreaCodeLabel = UILabel()
  163. phoneAreaCodeLabel.text = "+86"
  164. phoneAreaCodeLabel.textColor = k333333Color
  165. phoneAreaCodeLabel.font = kMediumFont16
  166. phoneAreaCodeLabel.sizeToFit()
  167. phoneAreaCodeLabel.textAlignment = .center
  168. return phoneAreaCodeLabel
  169. }()
  170. private lazy var phoneNumberTextField : UITextField = {
  171. let phoneNumberTextField = UITextField()
  172. phoneNumberTextField.placeholder = "请输入手机号码"
  173. phoneNumberTextField.borderStyle = .none
  174. phoneNumberTextField.textColor = k666666Color
  175. phoneNumberTextField.font = kRegularFont15
  176. phoneNumberTextField.clearButtonMode = .whileEditing
  177. phoneNumberTextField.sizeToFit()
  178. phoneNumberTextField.keyboardType = .numberPad
  179. phoneNumberTextField.tintColor = kThemeColor
  180. return phoneNumberTextField
  181. }()
  182. private lazy var passwordBgView: UIView = {
  183. let passwordBgView = UIView()
  184. passwordBgView.backgroundColor = kf7f8faColor.withAlphaComponent(0.8)
  185. passwordBgView.cornerRadius = 22
  186. passwordBgView.masksToBounds = true
  187. return passwordBgView
  188. }()
  189. private lazy var saftButton: UIButton = {
  190. let saftButton = UIButton(type: UIButton.ButtonType.custom)
  191. saftButton.setImage(kImage(name: "login_show"), for: UIControl.State.normal)
  192. saftButton.setImage(kImage(name: "login_show_pressed"), for: UIControl.State.selected)
  193. saftButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  194. saftButton.isSelected = !saftButton.isSelected
  195. self?.passwordTextField.isSecureTextEntry = saftButton.isSelected
  196. }).disposed(by: disposeBag)
  197. return saftButton
  198. }()
  199. private lazy var passwordTextField : UITextField = {
  200. let passwordTextField = UITextField()
  201. passwordTextField.placeholder = "请输入密码"
  202. passwordTextField.borderStyle = .none
  203. passwordTextField.textColor = k666666Color
  204. passwordTextField.font = kRegularFont15
  205. passwordTextField.sizeToFit()
  206. passwordTextField.isSecureTextEntry = false
  207. // passwordTextField.clearButtonMode = .whileEditing
  208. passwordTextField.tintColor = kThemeColor
  209. return passwordTextField
  210. }()
  211. private lazy var loginButton: UIButton = {
  212. let loginButton = UIButton(type: UIButton.ButtonType.custom)
  213. loginButton.setTitle("登录", for: UIControl.State.normal)
  214. loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  215. loginButton.setTitleColor(kffffffColor, for: UIControl.State.disabled)
  216. loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
  217. loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
  218. loginButton.titleLabel?.font = kRegularFont16
  219. loginButton.cornerRadius = 24
  220. loginButton.masksToBounds = true
  221. loginButton.isEnabled = false
  222. return loginButton
  223. }()
  224. private lazy var agreementLabel: FMLinkLabel = {
  225. let agreementLabel = FMLinkLabel()
  226. agreementLabel.numberOfLines = 0
  227. agreementLabel.textColor = kbbbbbbColor
  228. agreementLabel.font = kRegularFont12
  229. agreementLabel.isUserInteractionEnabled = true
  230. agreementLabel.text = "登录即表示你已阅读并同意 由你用户协议 和 隐私条款"
  231. agreementLabel.textAlignment = .center
  232. return agreementLabel
  233. }()
  234. private lazy var forgetPasswordButton: UIButton = {
  235. let forgetPasswordButton = UIButton(type: UIButton.ButtonType.custom)
  236. forgetPasswordButton.setTitle("忘记密码?", for: UIControl.State.normal)
  237. forgetPasswordButton.setTitleColor(k999999Color, for: UIControl.State.normal)
  238. forgetPasswordButton.titleLabel?.font = kRegularFont14
  239. return forgetPasswordButton
  240. }()
  241. }