Skip to content

Commit 92dc106

Browse files
add a toggle to show/hide title and a button to hide keyboard in inputField preview
1 parent cc2788b commit 92dc106

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

App/SwiftComponentsApp/SwiftComponentsApp/Previews/InputFieldPreview.swift

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Observation
12
import SwiftComponents
23
import SwiftUI
34
import UIKit
@@ -10,11 +11,14 @@ struct InputFieldPreview: View {
1011
@State private var text: String = ""
1112
@FocusState private var isFocused: Bool
1213

14+
private let inputField = UKInputField()
15+
private let inputFieldDelegate = InputFieldDelegate()
16+
1317
var body: some View {
1418
VStack {
1519
PreviewWrapper(title: "UIKit") {
1620
UKComponentPreview(model: self.model) {
17-
UKInputField(model: self.model)
21+
self.inputField
1822
}
1923
}
2024
PreviewWrapper(title: "SwiftUI") {
@@ -59,11 +63,7 @@ struct InputFieldPreview: View {
5963
return self.model.placeholder.isNotNilAndEmpty
6064
},
6165
set: { newValue in
62-
if newValue {
63-
self.model.placeholder = "Placeholder"
64-
} else {
65-
self.model.placeholder = nil
66-
}
66+
self.model.placeholder = newValue ? "Placeholder" : nil
6767
}
6868
))
6969
Toggle("Required", isOn: self.$model.isRequired)
@@ -82,11 +82,44 @@ struct InputFieldPreview: View {
8282
title: "Tint Color",
8383
selection: self.$model.tintColor
8484
)
85+
Toggle("Title", isOn: .init(
86+
get: {
87+
return self.model.title.isNotNilAndEmpty
88+
},
89+
set: { newValue in
90+
self.model.title = newValue ? "Title" : nil
91+
}
92+
))
93+
}
94+
}
95+
.onAppear {
96+
self.inputField.textField.delegate = self.inputFieldDelegate
97+
}
98+
.toolbar {
99+
ToolbarItem(placement: .primaryAction) {
100+
if self.inputFieldDelegate.isEditing || self.isFocused {
101+
Button("Hide Keyboard") {
102+
self.isFocused = false
103+
self.inputField.resignFirstResponder()
104+
}
105+
}
85106
}
86107
}
87108
}
88109
}
89110

111+
@Observable
112+
private final class InputFieldDelegate: NSObject, UITextFieldDelegate {
113+
var isEditing: Bool = false
114+
115+
func textFieldDidBeginEditing(_ textField: UITextField) {
116+
self.isEditing = true
117+
}
118+
func textFieldDidEndEditing(_ textField: UITextField) {
119+
self.isEditing = false
120+
}
121+
}
122+
90123
#Preview {
91124
InputFieldPreview()
92125
}

0 commit comments

Comments
 (0)