From 7169fc8edc280cd03339a8f5eab2a46ca30160c0 Mon Sep 17 00:00:00 2001 From: Kamil Burczyk Date: Mon, 25 Aug 2014 14:23:35 +0200 Subject: [PATCH 1/3] Added UITextFieldDelegate reference that will ask delegate if it really should change text in TSCurrencyTextField. It allows e.g. to limit max string length. Doing so when listening to UIControlEventEditingChanged was just ugly. --- TSCurrencyTextField/TSCurrencyTextField.h | 2 ++ TSCurrencyTextField/TSCurrencyTextField.m | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/TSCurrencyTextField/TSCurrencyTextField.h b/TSCurrencyTextField/TSCurrencyTextField.h index afeff79..c80010d 100644 --- a/TSCurrencyTextField/TSCurrencyTextField.h +++ b/TSCurrencyTextField/TSCurrencyTextField.h @@ -14,4 +14,6 @@ @property (nonatomic) NSNumber* amount; +@property (nonatomic, strong) id textFieldPublicDelegate; + @end diff --git a/TSCurrencyTextField/TSCurrencyTextField.m b/TSCurrencyTextField/TSCurrencyTextField.m index 6c4b0f5..ee9cd88 100644 --- a/TSCurrencyTextField/TSCurrencyTextField.m +++ b/TSCurrencyTextField/TSCurrencyTextField.m @@ -155,7 +155,14 @@ - (BOOL) textField: (TSCurrencyTextField *) textField shouldChangeCharactersInRa int distanceFromEnd = textField.text.length - (range.location + range.length); NSString* changed = [textField.text stringByReplacingCharactersInRange: range withString: string]; - [textField setText: changed]; + + if (textField.textFieldPublicDelegate) { + if ([textField.textFieldPublicDelegate textField:textField shouldChangeCharactersInRange:range replacementString:changed]) { + [textField setText: changed]; + } + } else { + [textField setText: changed]; + } int pos = textField.text.length - distanceFromEnd; if ( pos >= 0 && pos <= textField.text.length ) From dec949a656bcb23311ed78dafc47a4f18e267ddc Mon Sep 17 00:00:00 2001 From: Kamil Burczyk Date: Mon, 25 Aug 2014 14:49:31 +0200 Subject: [PATCH 2/3] Updated readme for textFieldPublicDelegate --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 0bc3aff..a620ba8 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,18 @@ pod 'TSCurrencyTextField', '~> 0.1.0' An example project is included in the Example directory. This should give you an idea how to use the class. +###textFieldPublicDelegate +Property was added to be able to call delegate method `- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;` if delegate exists to eventually decide if change should be made. Method is called with `string` parameter pointing to exactly the same string that will be put in text field right after method is called. +It allows to block text field editing e.g. if maximum length is reached: + +``` +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + const int maxPriceStringLength = 10; // '$' + 7 digits + 2 commas, e.g. $1,123,456 + return (string && string < maxPriceStringLength); +} +``` + ##Donate Please consider a small donation if you use TSCurrencyTextField in your projects. It'll make me feel good. From 86ec490e31c41e46d92b35c08e384b66552ad1cf Mon Sep 17 00:00:00 2001 From: Kamil Burczyk Date: Mon, 25 Aug 2014 14:50:43 +0200 Subject: [PATCH 3/3] Updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a620ba8..cd12e59 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ It allows to block text field editing e.g. if maximum length is reached: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { const int maxPriceStringLength = 10; // '$' + 7 digits + 2 commas, e.g. $1,123,456 - return (string && string < maxPriceStringLength); + return (string && string.length < maxPriceStringLength); } ```