-
Notifications
You must be signed in to change notification settings - Fork 2
/
MarkedTextField.swift
45 lines (37 loc) · 1.62 KB
/
MarkedTextField.swift
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
import SwiftUI
import UIKit
struct MarkedTextField: UIViewRepresentable {
@Binding var text: String
private let textField = UITextField(frame: .zero)
init(_ localizedStringKey: String, text: Binding<String>) {
_text = text
textField.placeholder = localizedStringKey
textField.borderStyle = .roundedRect
}
func makeUIView(context: UIViewRepresentableContext<MarkedTextField>) -> UITextField {
textField.delegate = context.coordinator
return textField
}
func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<MarkedTextField>) {}
func makeCoordinator() -> Coordinator { Coordinator(self) }
class Coordinator: NSObject, UITextFieldDelegate {
var markedTextField: MarkedTextField
init(_ markedTextField: MarkedTextField) {
self.markedTextField = markedTextField
super.init()
NotificationCenter.default.addObserver(self,
selector: #selector(Self.textDidchange(_:)),
name: UITextField.textDidChangeNotification,
object: markedTextField.textField)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
@objc private func textDidchange(_ notification: Notification) {
let textField = markedTextField.textField
if textField.markedTextRange == nil {
markedTextField.text = textField.text ?? String()
}
}
}
}