KMDesignTextField.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //
  2. // KMDesignTextField.swift
  3. // PDF Master
  4. //
  5. // Created by tangchao on 2023/6/7.
  6. //
  7. class KMDesignTextField: KMDesignBaseView {
  8. private var textField: KMCustomTextField?
  9. private var _designSize: KMDesignSize = .medium
  10. var designSize: KMDesignSize {
  11. get {
  12. return self._designSize
  13. }
  14. }
  15. var stringValue: String? {
  16. didSet {
  17. self.textField?.stringValue = self.stringValue ?? ""
  18. }
  19. }
  20. override var kmEnabled: Bool {
  21. get {
  22. return super.kmEnabled
  23. }
  24. set {
  25. super.kmEnabled = newValue
  26. if (newValue) {
  27. self.window?.makeFirstResponder(self.textField)
  28. } else {
  29. self.window?.makeFirstResponder(nil)
  30. }
  31. }
  32. }
  33. convenience init(designSize: KMDesignSize = .medium) {
  34. self.init()
  35. self._designSize = designSize
  36. }
  37. override func initSubViews() {
  38. super.initSubViews()
  39. let textFiled = KMCustomTextField()
  40. self.addSubview(textFiled)
  41. self.textField = textFiled
  42. self.textField?.delegate = self
  43. }
  44. override func initDefaultValue() {
  45. super.initDefaultValue()
  46. self.textField?.backgroundView.wantsLayer = true
  47. self.textField?.hoverAction = { [unowned self] sender, action in
  48. if (action == .enter) {
  49. self.state = .Hov
  50. } else if (action == .exit) {
  51. self.state = .Norm
  52. }
  53. }
  54. let model = KMDesignToken.shared.tokenUsesModel(withToken: self.find_bgToken(state: .Norm))
  55. if let data = model.height as? String, let _height = Float(data) {
  56. self.height = CGFloat(_height)
  57. }
  58. if let data = model.horizontalPadding as? String, let _vSpace = Float(data) {
  59. self.horizontalPadding = CGFloat(_vSpace)
  60. self.textField?.offset = self.horizontalPadding
  61. }
  62. self.state = .Norm
  63. }
  64. override func layout() {
  65. super.layout()
  66. let width: CGFloat = NSWidth(self.bounds)
  67. let heigth: CGFloat = NSHeight(self.bounds)
  68. let y: CGFloat = (heigth - self.height) * 0.5
  69. self.textField?.frame = NSMakeRect(0, y, width, self.height)
  70. }
  71. override func find_bgToken(state: KMDesignTokenState) -> String {
  72. if (state == .Norm) {
  73. return self.designSize == .medium ? "input.m.bg.norm" : "input.s.bg.norm"
  74. } else if (state == .Hov) {
  75. return self.designSize == .medium ? "input.m.bg.hov" : "input.s.bg.hov"
  76. } else if (state == .Focus) {
  77. return self.designSize == .medium ? "input.m.bg.focus" : "input.s.bg.focus"
  78. } else if (state == .Disabled) {
  79. return self.designSize == .medium ? "input.m.bg.dis" : "input.s.bg.dis"
  80. } else if (state == .Error_def) {
  81. return self.designSize == .medium ? "input.m.bg.error-def" : "input.s.bg.error-def"
  82. } else if (state == .Error_focus) {
  83. return self.designSize == .medium ? "input.m.bg.error-focus" : "input.s.bg.error-focus"
  84. }
  85. return ""
  86. }
  87. override func updateUI(state: KMDesignTokenState) {
  88. super.updateUI(state: state)
  89. self.textField?.backgroundView.layer?.backgroundColor = self.fillColor.cgColor
  90. self.textField?.backgroundView.layer?.borderWidth = self.borderWidth
  91. self.textField?.backgroundView.layer?.borderColor = self.borderColor.cgColor
  92. self.textField?.backgroundView.layer?.cornerRadius = self.borderRadius
  93. }
  94. }
  95. extension KMDesignTextField: KMCustomTextFieldDelegate {
  96. func km_didBecomeFirstResponder(textField: KMCustomTextField) {
  97. if (textField.isEqual(to: self.textField)) {
  98. self.state = .Focus
  99. }
  100. }
  101. }