OOUITextField.swift 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // OOUITextField.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2017/9/6.
  6. // Copyright © 2017年 zone. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftValidator
  10. @IBDesignable
  11. open class OOUITextField: UITextField {
  12. //左视图普通图片
  13. @IBInspectable open var leftImage:UIImage?
  14. //左视图高亮图片
  15. @IBInspectable open var leftLightImage:UIImage?
  16. //下划线普通颜色
  17. @IBInspectable open var lineColor:UIColor?
  18. //下划线高亮颜色
  19. @IBInspectable open var lineLightColor:UIColor?
  20. //下划线
  21. fileprivate var lineView:UIView!
  22. let validator = Validator()
  23. var rule:RegexRule? {
  24. didSet {
  25. validator.registerField(self, rules: [rule!])
  26. }
  27. }
  28. public override init(frame: CGRect) {
  29. super.init(frame: frame)
  30. commitInit()
  31. }
  32. open override func prepareForInterfaceBuilder() {
  33. super.prepareForInterfaceBuilder()
  34. }
  35. required public init?(coder aDecoder: NSCoder) {
  36. super.init(coder: aDecoder)
  37. }
  38. open override func awakeFromNib() {
  39. commitInit()
  40. }
  41. fileprivate func commitInit() {
  42. self.textColor = UIColor.hexInt(0x666666)
  43. self.font = UIFont(name: "PingFangSC-Regular", size: 15)!
  44. self.attributedPlaceholder = NSMutableAttributedString(string: self.placeholder ?? "", attributes: [NSAttributedString.Key.foregroundColor:UIColor.hexInt(0x999999),NSAttributedString.Key.font:UIFont(name: "PingFangSC-Regular", size: 13)!])
  45. leftViewMode = .always
  46. self.delegate = self
  47. let iv = UIImageView(image: leftImage, highlightedImage: leftLightImage)
  48. iv.frame = CGRect(x: 0, y: 0, width: (leftImage?.size.width)! , height: (leftImage?.size.height)!)
  49. let ivContainer = UIView(frame: CGRect(x: 0, y: 0, width: iv.frame.width + 10, height: iv.frame.height))
  50. ivContainer.addSubview(iv)
  51. leftView = ivContainer
  52. lineView = UIView(frame:CGRect(x: 0, y: frame.height - 0.5, width: frame.width, height: 0.5))
  53. lineView.backgroundColor = lineColor
  54. addSubview(lineView)
  55. }
  56. open override func layoutSubviews() {
  57. super.layoutSubviews()
  58. lineView.frame = CGRect(x: 0, y: self.frame.height - 0.5, width: self.frame.width, height: 0.5)
  59. }
  60. fileprivate func changeShowStatus(_ status:Bool = false) -> Void {
  61. if status {
  62. let lv = self.leftView?.subviews.first as! UIImageView
  63. lv.isHighlighted = true
  64. lineView.backgroundColor = lineLightColor
  65. }else{
  66. let lv = self.leftView?.subviews.first as! UIImageView
  67. lv.isHighlighted = false
  68. lineView.backgroundColor = lineColor
  69. }
  70. }
  71. }
  72. extension OOUITextField:UITextFieldDelegate {
  73. public func textFieldDidBeginEditing(_ textField: UITextField) {
  74. changeShowStatus(true)
  75. }
  76. public func textFieldDidEndEditing(_ textField: UITextField) {
  77. changeShowStatus(false)
  78. validationRule(textField)
  79. }
  80. public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  81. guard let _ = rule else {
  82. return true
  83. }
  84. validationRule(textField)
  85. return true
  86. }
  87. func validationRule(_ textField: UITextField) {
  88. validator.validateField(textField) { (error) in
  89. if error != nil {
  90. }
  91. }
  92. }
  93. }