DoubleRangeTableViewCell.swift 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //
  2. // DoubleRangeTableViewCell.swift
  3. // LoopKitUI
  4. //
  5. // Created by Michael Pangburn on 1/3/19.
  6. // Copyright © 2019 LoopKit Authors. All rights reserved.
  7. //
  8. import UIKit
  9. import LoopKit
  10. protocol DoubleRangeTableViewCellDelegate: AnyObject {
  11. func doubleRangeTableViewCellDidBeginEditing(_ cell: DoubleRangeTableViewCell)
  12. func doubleRangeTableViewCellDidUpdateRange(_ cell: DoubleRangeTableViewCell)
  13. }
  14. class DoubleRangeTableViewCell: UITableViewCell {
  15. @IBOutlet weak var titleLabel: UILabel!
  16. @IBOutlet weak var minValueTextField: PaddedTextField! {
  17. didSet {
  18. minValueTextField.delegate = self
  19. minValueTextField.addTarget(self, action: #selector(textFieldEditingChanged), for: .editingChanged)
  20. }
  21. }
  22. @IBOutlet weak var maxValueTextField: PaddedTextField! {
  23. didSet {
  24. maxValueTextField.delegate = self
  25. maxValueTextField.addTarget(self, action: #selector(textFieldEditingChanged), for: .editingChanged)
  26. }
  27. }
  28. @IBOutlet weak var unitLabel: UILabel!
  29. var numberFormatter = NumberFormatter()
  30. var range: DoubleRange? {
  31. get {
  32. guard
  33. let minValueString = minValueTextField.text,
  34. let minValue = numberFormatter.number(from: minValueString)?.doubleValue,
  35. let maxValueString = maxValueTextField.text,
  36. let maxValue = numberFormatter.number(from: maxValueString)?.doubleValue
  37. else {
  38. return nil
  39. }
  40. return DoubleRange(minValue: minValue, maxValue: maxValue)
  41. }
  42. set {
  43. guard let newValue = newValue else {
  44. minValueTextField.text = nil
  45. maxValueTextField.text = nil
  46. return
  47. }
  48. minValueTextField.text = numberFormatter.string(from: newValue.minValue)
  49. maxValueTextField.text = numberFormatter.string(from: newValue.maxValue)
  50. }
  51. }
  52. weak var delegate: DoubleRangeTableViewCellDelegate?
  53. @objc private func textFieldEditingChanged() {
  54. delegate?.doubleRangeTableViewCellDidUpdateRange(self)
  55. }
  56. }
  57. extension DoubleRangeTableViewCell: UITextFieldDelegate {
  58. func textFieldDidBeginEditing(_ textField: UITextField) {
  59. delegate?.doubleRangeTableViewCellDidBeginEditing(self)
  60. }
  61. func textFieldDidEndEditing(_ textField: UITextField) {
  62. delegate?.doubleRangeTableViewCellDidUpdateRange(self)
  63. }
  64. }