forked from LoopKit/LoopKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTextFieldTableViewController.swift
More file actions
113 lines (78 loc) · 3.2 KB
/
TextFieldTableViewController.swift
File metadata and controls
113 lines (78 loc) · 3.2 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
111
112
113
//
// TextFieldTableViewController.swift
// Naterade
//
// Created by Nathan Racklyeft on 8/30/15.
// Copyright © 2015 Nathan Racklyeft. All rights reserved.
//
import UIKit
public protocol TextFieldTableViewControllerDelegate: AnyObject {
func textFieldTableViewControllerDidEndEditing(_ controller: TextFieldTableViewController)
func textFieldTableViewControllerDidReturn(_ controller: TextFieldTableViewController)
}
open class TextFieldTableViewController: UITableViewController, UITextFieldDelegate {
private weak var textField: UITextField?
public var indexPath: IndexPath?
public var placeholder: String?
public var unit: String?
public var value: String? {
didSet {
delegate?.textFieldTableViewControllerDidEndEditing(self)
}
}
public var contextHelp: String?
public var keyboardType = UIKeyboardType.default
public var autocapitalizationType = UITextAutocapitalizationType.sentences
open weak var delegate: TextFieldTableViewControllerDelegate?
public convenience init() {
self.init(style: .grouped)
}
open override func viewDidLoad() {
super.viewDidLoad()
tableView.cellLayoutMarginsFollowReadableWidth = true
tableView.register(TextFieldTableViewCell.nib(), forCellReuseIdentifier: TextFieldTableViewCell.className)
}
open override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
textField?.becomeFirstResponder()
}
// MARK: - UITableViewDataSource
open override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
open override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TextFieldTableViewCell.className, for: indexPath) as! TextFieldTableViewCell
textField = cell.textField
cell.textField.delegate = self
cell.textField.text = value
cell.textField.keyboardType = keyboardType
cell.textField.placeholder = placeholder
cell.textField.autocapitalizationType = autocapitalizationType
cell.unitLabel?.text = unit
return cell
}
open override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
return contextHelp
}
open override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath == IndexPath(row: 0, section: 0), let textField = textField {
if textField.isFirstResponder {
textField.resignFirstResponder()
} else {
textField.becomeFirstResponder()
}
}
tableView.deselectRow(at: indexPath, animated: true)
}
// MARK: - UITextFieldDelegate
open func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
value = textField.text
return true
}
open func textFieldShouldReturn(_ textField: UITextField) -> Bool {
value = textField.text
textField.delegate = nil
delegate?.textFieldTableViewControllerDidReturn(self)
return false
}
}