KMTextFieldStepperView.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //
  2. // KMTextFieldStepperView.swift
  3. // PDF Office
  4. //
  5. // Created by lizhe on 2022/12/13.
  6. //
  7. import Cocoa
  8. typealias KMTextFieldStepperViewValueDidChange = (_ view: KMTextFieldStepperView, _ value: String) -> Void
  9. class KMTextFieldStepperView: NSView, NSTextFieldDelegate {
  10. @IBOutlet var contentView: NSView!
  11. @IBOutlet weak var inputTextField: KMBaseTextField!
  12. @IBOutlet weak var stepper: NSStepper!
  13. var presenter: KMBaseTextFieldPresenter = KMBaseTextFieldPresenter()
  14. var model: KMBaseTextFieldModel = KMBaseTextFieldModel() {
  15. didSet {
  16. self.presenter.model = model
  17. self.inputTextField.model = model
  18. }
  19. }
  20. var valueDidChange: KMTextFieldStepperViewValueDidChange?
  21. var stringValue: String {
  22. set {
  23. self.stepper.stringValue = newValue
  24. self.inputTextField.stringValue = newValue
  25. }
  26. get {
  27. return self.inputTextField.stringValue
  28. }
  29. }
  30. var isEnabled: Bool = true {
  31. didSet {
  32. self.inputTextField.isEnabled = isEnabled
  33. self.stepper.isEnabled = isEnabled
  34. }
  35. }
  36. deinit {
  37. // self.delegate = nil
  38. }
  39. override func draw(_ dirtyRect: NSRect) {
  40. super.draw(dirtyRect)
  41. // Drawing code here.
  42. }
  43. // MARK: 初始化
  44. public required init?(coder decoder: NSCoder) {
  45. super.init(coder: decoder)
  46. initContentView()
  47. setup()
  48. }
  49. private func initContentView() {
  50. //绑定xib
  51. let resource = NSNib(nibNamed: String(describing: self.classForCoder.self),
  52. bundle: Bundle(for: self.classForCoder.self))!
  53. resource.instantiate(withOwner: self, topLevelObjects: nil)
  54. addSubview(contentView)
  55. contentView.translatesAutoresizingMaskIntoConstraints = false
  56. NSLayoutConstraint.activate([
  57. contentView.topAnchor.constraint(equalTo: topAnchor),
  58. contentView.leftAnchor.constraint(equalTo: leftAnchor),
  59. contentView.rightAnchor.constraint(equalTo: rightAnchor),
  60. contentView.bottomAnchor.constraint(equalTo: bottomAnchor)])
  61. contentView.updateConstraintsForSubtreeIfNeeded()
  62. }
  63. func setup() {
  64. self.presenter.initPresenter(delegate: self, model: self.model)
  65. self.inputTextField.textDidEndEditing = {[unowned self] textField in
  66. self.presenter.changeValue(value: textField.stringValue)
  67. }
  68. }
  69. //刷新界面UI 和 数据
  70. func reloadData() {
  71. self.inputTextField.stringValue = self.model.stringValue
  72. self.stepper.stringValue = self.model.stringValue
  73. }
  74. }
  75. protocol KMTextFieldStepperViewPrivate {}
  76. extension KMTextFieldStepperView: KMTextFieldStepperViewPrivate {
  77. }
  78. protocol KMTextFieldStepperViewAction {}
  79. extension KMTextFieldStepperView: KMTextFieldStepperViewAction {
  80. @IBAction func stepperAction(_ sender: NSStepper) {
  81. print(sender.intValue)
  82. self.presenter.changeValue(value: sender.stringValue)
  83. }
  84. }
  85. extension KMTextFieldStepperView: KMBaseTextFieldPresenterDelegate {
  86. func valueDidChange(presenter: KMBaseTextFieldPresenter, model: KMBaseTextFieldModel) {
  87. self.reloadData()
  88. if self.valueDidChange != nil {
  89. self.valueDidChange!(self, self.model.stringValue)
  90. }
  91. }
  92. }