forked from LoopKit/Loop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNumberEntry.swift
More file actions
110 lines (84 loc) · 3.19 KB
/
NumberEntry.swift
File metadata and controls
110 lines (84 loc) · 3.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
// NumberEntry.swift
// Learn
//
// Copyright © 2019 LoopKit Authors. All rights reserved.
//
import Foundation
import LoopKitUI
class TextEntry: TextFieldTableViewCellDelegate {
func registerCell(for tableView: UITableView) {
tableView.register(TextFieldTableViewCell.nib(), forCellReuseIdentifier: TextFieldTableViewCell.className)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> TextFieldTableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TextFieldTableViewCell.className, for: indexPath) as! TextFieldTableViewCell
cell.delegate = self
return cell
}
// MARK: - TextFieldTableViewCellDelegate
func textFieldTableViewCellDidBeginEditing(_ cell: TextFieldTableViewCell) {
}
func textFieldTableViewCellDidEndEditing(_ cell: TextFieldTableViewCell) {
}
}
class NumberEntry: TextEntry, LessonCellProviding {
let formatter: NumberFormatter
private(set) var number: NSNumber?
let keyboardType: UIKeyboardType
let placeholder: String?
let unitString: String?
init(number: NSNumber?, formatter: NumberFormatter, placeholder: String?, unitString: String?, keyboardType: UIKeyboardType) {
self.number = number
self.formatter = formatter
self.placeholder = placeholder
self.unitString = unitString
self.keyboardType = keyboardType
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
cell.textField.placeholder = placeholder
cell.unitLabel?.text = unitString
cell.textField.keyboardType = keyboardType
updateText(for: cell)
return cell
}
override func textFieldTableViewCellDidEndEditing(_ cell: TextFieldTableViewCell) {
if let text = cell.textField.text {
number = formatter.number(from: text)
} else {
number = nil
}
updateText(for: cell)
}
private func updateText(for cell: TextFieldTableViewCell) {
if let number = number {
cell.textField.text = formatter.string(from: number)
} else {
cell.textField.text = nil
}
}
}
extension NumberEntry {
class func decimalEntry(value: Double?, unitString: String?) -> NumberEntry {
let number: NSNumber?
if let value = value {
number = NSNumber(value: value)
} else {
number = nil
}
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
return NumberEntry(number: number, formatter: formatter, placeholder: nil, unitString: unitString, keyboardType: .decimalPad)
}
class func integerEntry(value: Int?, unitString: String?) -> NumberEntry {
let number: NSNumber?
if let value = value {
number = NSNumber(value: value)
} else {
number = nil
}
let formatter = NumberFormatter()
formatter.numberStyle = .none
return NumberEntry(number: number, formatter: formatter, placeholder: nil, unitString: unitString, keyboardType: .decimalPad)
}
}