diff --git a/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme
new file mode 100644
index 0000000..1cc5671
--- /dev/null
+++ b/Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Example/Example/ContentView.swift b/Example/Example/ContentView.swift
index e41d885..e75e384 100644
--- a/Example/Example/ContentView.swift
+++ b/Example/Example/ContentView.swift
@@ -19,78 +19,90 @@ struct ContentView: View {
// MARK: - BODY
var body: some View {
- VStack(alignment: .leading, spacing: 30) {
+
+ ScrollView(showsIndicators: false) {
- // Default
- Group {
- Text("Default")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text1, tag: 0, isFirstResponder: true, placeholder: "1st") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+ VStack(alignment: .leading, spacing: 30) {
+
+ // Default
+ Group {
+ Text("Default")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text1, tag: 0, isFirstResponder: true, placeholder: "1st") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+
+ Text(text1)
}
- Text(text1)
- }
-
- // SecureType + RectangleLine Border
- Group {
- Text("SecureType + RectangleLine Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text2, tag: 1, placeholder: "2nd") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+ // SecureType + RectangleLine Border
+ Group {
+ Text("SecureType + RectangleLine Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text2, tag: 1, placeholder: "2nd") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableSecureType()
+ .respondableLineStyle()
+
+ Text(text2)
}
- .respondableSecureType()
- .respondableLineStyle()
- Text(text2)
- }
-
- // NumberPad + OneTimeCode + Rounded Border
- Group {
- Text("NumberPad + OneTimeCode + Rounded Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text3, tag: 2, placeholder: "3rd") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+ // NumberPad + OneTimeCode + Rounded Border
+ Group {
+ Text("NumberPad + OneTimeCode + Rounded Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text3, tag: 2, placeholder: "3rd") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableKeyboardType(.numberPad)
+ .respondableContentType(.oneTimeCode)
+ .textFieldStyle(RoundedBorderTextFieldStyle())
+
+ Text(text3)
}
- .respondableKeyboardType(.numberPad)
- .respondableContentType(.oneTimeCode)
- .textFieldStyle(RoundedBorderTextFieldStyle())
- Text(text3)
- }
-
- // didEndEditing + Bazel Border + Font
- Group {
- Text("didBeginEditing + didEndEditing + Bazel Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text4, tag: 3, placeholder: "4th") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+ // didEndEditing + Bazel Border + Font
+ Group {
+ Text("didBeginEditing + didEndEditing + Bazel Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text4, tag: 3, placeholder: "4th") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableBezelStyle()
+ .respondableFont(.systemFont(ofSize: 20, weight: .bold))
+
+ Text(text4)
}
- .respondableBezelStyle()
- .respondableFont(.systemFont(ofSize: 20, weight: .bold))
- Text(text4)
- }
-
- } //: V
- .padding()
-
+ } //: V
+ .padding()
+ } //: S
+ .preferredColorScheme(.light)
}
}
diff --git a/README.md b/README.md
index 9cad0bb..31af1bb 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,7 @@


[](https://github.com/aaronLab/SweetCardScanner/blob/main/LICENSE)
+[](https://github.com/aaronLab/RespondableTextField/releases/tag/v1.0.0)
# RespondableTextField
@@ -35,7 +36,8 @@
placeholder: String? = nil,
onEditing: ((String) -> Void)? = nil,
didBeginEditing: (() -> Void)? = nil,
- didEndEditing: (() -> Void)? = nil
+ didEndEditing: (() -> Void)? = nil,
+ shouldReturn: ((String?) -> Void)? = nil
)
```
@@ -68,78 +70,90 @@ struct ContentView: View {
// MARK: - BODY
var body: some View {
- VStack(alignment: .leading, spacing: 30) {
-
- // Default
- Group {
- Text("Default")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text1, tag: 0, isFirstResponder: true, placeholder: "1st") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+
+ ScrollView(showsIndicators: false) {
+
+ VStack(alignment: .leading, spacing: 30) {
+
+ // Default
+ Group {
+ Text("Default")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text1, tag: 0, isFirstResponder: true, placeholder: "1st") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+
+ Text(text1)
}
-
- Text(text1)
- }
-
- // SecureType + RectangleLine Border
- Group {
- Text("SecureType + RectangleLine Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text2, tag: 1, placeholder: "2nd") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+
+ // SecureType + RectangleLine Border
+ Group {
+ Text("SecureType + RectangleLine Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text2, tag: 1, placeholder: "2nd") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableSecureType()
+ .respondableLineStyle()
+
+ Text(text2)
}
- .respondableSecureType()
- .respondableLineStyle()
-
- Text(text2)
- }
-
- // NumberPad + OneTimeCode + Rounded Border
- Group {
- Text("NumberPad + OneTimeCode + Rounded Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text3, tag: 2, placeholder: "3rd") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+
+ // NumberPad + OneTimeCode + Rounded Border
+ Group {
+ Text("NumberPad + OneTimeCode + Rounded Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text3, tag: 2, placeholder: "3rd") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableKeyboardType(.numberPad)
+ .respondableContentType(.oneTimeCode)
+ .textFieldStyle(RoundedBorderTextFieldStyle())
+
+ Text(text3)
}
- .respondableKeyboardType(.numberPad)
- .respondableContentType(.oneTimeCode)
- .textFieldStyle(RoundedBorderTextFieldStyle())
-
- Text(text3)
- }
-
- // didEndEditing + Bazel Border + Font
- Group {
- Text("didBeginEditing + didEndEditing + Bazel Border")
- .font(.system(size: 14, weight: .bold, design: .default))
- RespondableTextField(text: $text4, tag: 3, placeholder: "4th") { value in
- print("onEditing: \(value)")
- } didBeginEditing: {
- print("didBeginEditing")
- } didEndEditing: {
- print("didEndEditing")
+
+ // didEndEditing + Bazel Border + Font
+ Group {
+ Text("didBeginEditing + didEndEditing + Bazel Border")
+ .font(.system(size: 14, weight: .bold, design: .default))
+ RespondableTextField(text: $text4, tag: 3, placeholder: "4th") { value in
+ print("onEditing: \(value)")
+ } didBeginEditing: {
+ print("didBeginEditing")
+ } didEndEditing: {
+ print("didEndEditing")
+ } shouldReturn: { value in
+ print("shouldReturn: \(value ?? "N/A")")
+ }
+ .respondableBezelStyle()
+ .respondableFont(.systemFont(ofSize: 20, weight: .bold))
+
+ Text(text4)
}
- .respondableBezelStyle()
- .respondableFont(.systemFont(ofSize: 20, weight: .bold))
-
- Text(text4)
- }
-
- } //: V
- .padding()
-
+
+ } //: V
+ .padding()
+ } //: S
+ .preferredColorScheme(.light)
}
}
diff --git a/RespondableTextField.xcodeproj/project.pbxproj b/RespondableTextField.xcodeproj/project.pbxproj
index 5672ea0..38f9fea 100644
--- a/RespondableTextField.xcodeproj/project.pbxproj
+++ b/RespondableTextField.xcodeproj/project.pbxproj
@@ -52,8 +52,8 @@
OBJ_18 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; };
OBJ_9 /* RespondableTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RespondableTextField.swift; sourceTree = ""; };
- "RespondableTextField::RespondableTextField::Product" /* RespondableTextField.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = RespondableTextField.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- "RespondableTextField::RespondableTextFieldTests::Product" /* RespondableTextFieldTests.xctest */ = {isa = PBXFileReference; lastKnownFileType = file; path = RespondableTextFieldTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ "RespondableTextField::RespondableTextField::Product" /* RespondableTextField.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RespondableTextField.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ "RespondableTextField::RespondableTextFieldTests::Product" /* RespondableTextFieldTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; path = RespondableTextFieldTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -188,7 +188,7 @@
isa = PBXProject;
attributes = {
LastSwiftMigration = 9999;
- LastUpgradeCheck = 9999;
+ LastUpgradeCheck = 1230;
};
buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "RespondableTextField" */;
compatibilityVersion = "Xcode 3.2";
@@ -262,7 +262,7 @@
);
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = RespondableTextField.xcodeproj/RespondableTextField_Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_CFLAGS = "$(inherited)";
@@ -275,7 +275,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
SWIFT_VERSION = 5.0;
TARGET_NAME = RespondableTextField;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
};
name = Debug;
@@ -290,7 +290,7 @@
);
HEADER_SEARCH_PATHS = "$(inherited)";
INFOPLIST_FILE = RespondableTextField.xcodeproj/RespondableTextField_Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx";
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_CFLAGS = "$(inherited)";
@@ -303,7 +303,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
SWIFT_VERSION = 5.0;
TARGET_NAME = RespondableTextField;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
};
name = Release;
@@ -330,17 +330,44 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_NS_ASSERTIONS = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"SWIFT_PACKAGE=1",
"DEBUG=1",
);
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.10;
ONLY_ACTIVE_ARCH = YES;
OTHER_SWIFT_FLAGS = "$(inherited) -DXcode";
@@ -368,8 +395,8 @@
OBJ_39 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CLANG_ENABLE_MODULES = YES;
- EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
@@ -385,7 +412,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
SWIFT_VERSION = 5.0;
TARGET_NAME = RespondableTextFieldTests;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
};
name = Debug;
@@ -394,15 +421,41 @@
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = s;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"SWIFT_PACKAGE=1",
);
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_SWIFT_FLAGS = "$(inherited) -DXcode";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -417,8 +470,8 @@
OBJ_40 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CLANG_ENABLE_MODULES = YES;
- EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PLATFORM_DIR)/Developer/Library/Frameworks",
@@ -434,7 +487,7 @@
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)";
SWIFT_VERSION = 5.0;
TARGET_NAME = RespondableTextFieldTests;
- TVOS_DEPLOYMENT_TARGET = 9.0;
+ TVOS_DEPLOYMENT_TARGET = 12.0;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
};
name = Release;
diff --git a/RespondableTextField.xcodeproj/xcshareddata/xcschemes/RespondableTextField.xcscheme b/RespondableTextField.xcodeproj/xcshareddata/xcschemes/RespondableTextField.xcscheme
index 327e2be..512c985 100644
--- a/RespondableTextField.xcodeproj/xcshareddata/xcschemes/RespondableTextField.xcscheme
+++ b/RespondableTextField.xcodeproj/xcshareddata/xcschemes/RespondableTextField.xcscheme
@@ -1,6 +1,6 @@
Void)?
let didBeginEditing: (() -> Void)?
let didEndEditing: (() -> Void)?
+ let shouldReturn: ((String?) -> Void)?
// MARK: - INIT
@@ -31,7 +32,8 @@ public struct RespondableTextField: UIViewRepresentable {
placeholder: String? = nil,
onEditing: ((String) -> Void)? = nil,
didBeginEditing: (() -> Void)? = nil,
- didEndEditing: (() -> Void)? = nil
+ didEndEditing: (() -> Void)? = nil,
+ shouldReturn: ((String?) -> Void)? = nil
) {
self._text = text
self.tag = tag
@@ -40,6 +42,7 @@ public struct RespondableTextField: UIViewRepresentable {
self.onEditing = onEditing
self.didBeginEditing = didBeginEditing
self.didEndEditing = didEndEditing
+ self.shouldReturn = shouldReturn
}
// MARK: - UIViewRepresentable
@@ -69,7 +72,7 @@ public struct RespondableTextField: UIViewRepresentable {
extension RespondableTextField {
public func makeCoordinator() -> RespondableTextField.Coordinator {
- return Coordinator(text: $text, tag: tag, isFirstResponder: isFirstResponder, placeholder: placeholder, onEditing: onEditing, didBeginEditing: didBeginEditing, didEndEditing: didEndEditing)
+ return Coordinator(text: $text, tag: tag, isFirstResponder: isFirstResponder, placeholder: placeholder, onEditing: onEditing, didBeginEditing: didBeginEditing, didEndEditing: didEndEditing, shouldReturn: shouldReturn)
}
public class Coordinator: NSObject, UITextFieldDelegate {
@@ -84,6 +87,7 @@ extension RespondableTextField {
let onEditing: ((String) -> Void)?
let didBeginEditing: (() -> Void)?
let didEndEditing: (() -> Void)?
+ let shouldReturn: ((String?) -> Void)?
// MARK: - INIT
@@ -94,7 +98,8 @@ extension RespondableTextField {
placeholder: String? = nil,
onEditing: ((String) -> Void)? = nil,
didBeginEditing: (() -> Void)? = nil,
- didEndEditing: (() -> Void)? = nil
+ didEndEditing: (() -> Void)? = nil,
+ shouldReturn: ((String?) -> Void)? = nil
) {
self._text = text
self.tag = tag
@@ -103,6 +108,7 @@ extension RespondableTextField {
self.onEditing = onEditing
self.didBeginEditing = didBeginEditing
self.didEndEditing = didEndEditing
+ self.shouldReturn = shouldReturn
}
public func textFieldDidChangeSelection(_ textField: UITextField) {
@@ -125,6 +131,7 @@ extension RespondableTextField {
} else {
textField.resignFirstResponder()
}
+ shouldReturn?(textField.text)
return false
}