From dd7007d6ade90fa9ce3ee21e94462730c7e04c65 Mon Sep 17 00:00:00 2001 From: Caio Mathielo Date: Wed, 28 Oct 2015 18:22:24 -0200 Subject: [PATCH 1/3] Adding public method validateField() --- SwiftValidator/Core/Validator.swift | 20 ++++++++++++++++++++ Validator/ViewController.swift | 14 ++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/SwiftValidator/Core/Validator.swift b/SwiftValidator/Core/Validator.swift index f9b806c..a5d41df 100644 --- a/SwiftValidator/Core/Validator.swift +++ b/SwiftValidator/Core/Validator.swift @@ -47,6 +47,26 @@ public class Validator { } } + // MARK: Public functions + + public func validateField(textField: UITextField, callback: (error:ValidationError?) -> Void){ + if let fieldRule = validations[textField] { + if let error = fieldRule.validateField() { + if let transform = self.errorStyleTransform { + transform(validationError: error) + } + callback(error: error) + } else { + if let transform = self.successStyleTransform { + transform(validationRule: fieldRule) + } + callback(error: nil) + } + } else { + callback(error: nil) + } + } + // MARK: Using Keys public func styleTransformers(success success:((validationRule:ValidationRule)->Void)?, error:((validationError:ValidationError)->Void)?) { diff --git a/Validator/ViewController.swift b/Validator/ViewController.swift index 6d37f64..f273e1a 100644 --- a/Validator/ViewController.swift +++ b/Validator/ViewController.swift @@ -78,4 +78,18 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate func hideKeyboard(){ self.view.endEditing(true) } + + // MARK: Validate single field + // Don't forget to use UITextFieldDelegate + func textFieldShouldReturn(textField: UITextField) -> Bool { + validator.validateField(textField){ error in + if error == nil { + // Field validation was successful + } else { + // Validation error occurred + } + } + return true + } + } \ No newline at end of file From 73e1e443a5dd8ef06c89a2667e9a0bf017f545af Mon Sep 17 00:00:00 2001 From: Caio Mathielo Date: Wed, 28 Oct 2015 18:30:00 -0200 Subject: [PATCH 2/3] Updating README, adding Single Field Validation --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index aaf230d..ac4c224 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,26 @@ func validationFailed(errors:[UITextField:ValidationError]) { ``` +### Single Field Validation + +You may use single field validation in some cases. This could be useful in situations such as controlling responders: + +```swift +// Don't forget to use UITextFieldDelegate +// and delegate yourTextField to self in viewDidLoad() +func textFieldShouldReturn(textField: UITextField) -> Bool { + validator.validateField(textField){ error in + if error == nil { + // Field validation was successful + } else { + // Validation error occurred + } + } + return true +} +``` + + ## Custom Validation We will create a ```SSNRule``` class to show how to create your own Validation. A United States Social Security Number (or SSN) is a field that consists of XXX-XX-XXXX. From fdf332d024f9e81ba6f04bce5135bb15a11959cb Mon Sep 17 00:00:00 2001 From: Caio Mathielo Date: Wed, 6 Jan 2016 12:43:29 -0200 Subject: [PATCH 3/3] Adding single field validation Tests --- SwiftValidatorTests/SwiftValidatorTests.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SwiftValidatorTests/SwiftValidatorTests.swift b/SwiftValidatorTests/SwiftValidatorTests.swift index 0c34d25..0a3c1a0 100644 --- a/SwiftValidatorTests/SwiftValidatorTests.swift +++ b/SwiftValidatorTests/SwiftValidatorTests.swift @@ -211,6 +211,18 @@ class SwiftValidatorTests: XCTestCase { } } + func testValidateSingleField() { + REGISTER_VALIDATOR.registerField(REGISTER_TXT_FIELD, rules: [EmailRule()]) + REGISTER_TXT_FIELD.text = VALID_EMAIL + REGISTER_VALIDATOR.validateField(REGISTER_TXT_FIELD) { error in + XCTAssert(error == nil, "Should not present error") + } + REGISTER_TXT_FIELD.text = INVALID_EMAIL + REGISTER_VALIDATOR.validateField(REGISTER_TXT_FIELD) { error in + XCTAssert(error?.errorMessage.characters.count > 0, "Should state 'invalid email'") + } + } + // MARK: Validate error field gets it's text set to the error, if supplied func testNoErrorMessageSet() {