From 5ab5482b9990bd62f8a652862b299d37fd11a575 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Fri, 25 Jan 2013 19:14:16 +0200 Subject: [PATCH 01/13] clean up a little and two init methods were added --- MSCurrencyFormatter.h | 9 +- MSCurrencyFormatter.m | 450 ++++++++++++++++-------------------------- 2 files changed, 178 insertions(+), 281 deletions(-) diff --git a/MSCurrencyFormatter.h b/MSCurrencyFormatter.h index dbca97a..e48b2b7 100644 --- a/MSCurrencyFormatter.h +++ b/MSCurrencyFormatter.h @@ -10,10 +10,11 @@ @interface MSCurrencyFormatter : NSObject --(void)startWatchingForKeyboardFromTextField:(UITextField *)textField; +- (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton; +- (id)initWithLocale:(NSLocale *)locale; +- (void)startWatchingForKeyboardFromTextField:(UITextField *)textField; +- (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NSRange)range withReplacementString:(NSString *)string; -+(NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NSRange)range withReplacementString:(NSString *)string; - -+(NSDecimalNumber *)decimalNumberFromFormattedString:(NSString *)string; ++ (NSDecimalNumber *)decimalNumberFromFormattedString:(NSString *)string; @end diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index 197aa10..6d7ea3e 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -10,8 +10,11 @@ @interface MSCurrencyFormatter () +@property (nonatomic, strong) NSLocale *locale; +@property (nonatomic, strong) NSNumberFormatter *formatter; @property (nonatomic, strong) UIButton *toggleButton; @property (nonatomic, weak) UITextField *assignedTextField; +@property (nonatomic, assign) BOOL withToggleButton; @property (nonatomic, assign) BOOL newButton; @property (nonatomic, assign) BOOL keyboardDidShow; @@ -19,329 +22,222 @@ @interface MSCurrencyFormatter () @implementation MSCurrencyFormatter -- (id)init { - - if ((self = [super init])) { - - if (self.toggleButton == nil) { - - // create custom button - self.toggleButton = [UIButton buttonWithType:UIButtonTypeCustom]; - self.toggleButton.frame = CGRectMake(0, 163, 105, 53); - self.toggleButton.adjustsImageWhenHighlighted = NO; - [self.toggleButton setImage:[UIImage imageNamed:@"toggleButtonUp.png"] forState:UIControlStateNormal]; - [self.toggleButton setImage:[UIImage imageNamed:@"toggleButtonDown.png"] forState:UIControlStateHighlighted]; - [self.toggleButton addTarget:self action:@selector(toggleButton:) forControlEvents:UIControlEventTouchUpInside]; - - } - - self.newButton = TRUE; +- (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton +{ + if (self = [super init]) { + [self setLocale:locale]; + [self setWithToggleButton:toggleButton]; + [self setFormatter:[[NSNumberFormatter alloc] init]]; + [[self formatter] setNumberStyle:NSNumberFormatterCurrencyStyle]; + [[self formatter] setLocale:[self locale]]; + + if ([self withToggleButton] && [[self toggleButton] isEqual:nil]) { + [self setToggleButton:[UIButton buttonWithType:UIButtonTypeCustom]]; + + [[self toggleButton] setFrame:CGRectMake(0, 163, 105, 53)]; + [[self toggleButton] setAdjustsImageWhenHighlighted:NO]; + [[self toggleButton] setImage:[UIImage imageNamed:@"toggleButtonUp.png"] forState:UIControlStateNormal]; + [[self toggleButton] setImage:[UIImage imageNamed:@"toggleButtonDown.png"] forState:UIControlStateHighlighted]; + [[self toggleButton] addTarget:self action:@selector(toggleButton:) forControlEvents:UIControlEventTouchUpInside]; } - - return self; -} + [self setNewButton:TRUE]; + } -#pragma mark UIKeyboard Notifications + return self; +} --(void)dealloc { - - [self endWatchingForKeyboard]; +- (id)initWithLocale:(NSLocale *)locale +{ + return [self initWithLocale:locale withToggleButton:NO]; } --(void)startWatchingForKeyboardFromTextField:(UITextField *)textField { - - self.assignedTextField = textField; - self.assignedTextField.keyboardType = UIKeyboardTypeNumberPad; - - if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"]) { - - //NSLog(@"start watching for keyboard"); - - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardDidShow:) - name:UIKeyboardDidShowNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardStartedEditing:) - name:UITextFieldTextDidBeginEditingNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(keyboardWasDismissed:) - name:UIKeyboardWillHideNotification - object:nil]; - - - - } +- (id)init +{ + return [self initWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; } +#pragma mark UIKeyboard Notifications +- (void)dealloc +{ + [self endWatchingForKeyboard]; +} -- (void)keyboardDidShow:(NSNotification *)note { - - self.keyboardDidShow = TRUE; - - if ([self.assignedTextField isFirstResponder] && self.newButton) { - - //NSLog(@"A new button is needed."); - - [self addButtonToKeyboard]; - +- (void)startWatchingForKeyboardFromTextField:(UITextField *)textField +{ + self.assignedTextField = textField; + self.assignedTextField.keyboardType = UIKeyboardTypeNumberPad; + + if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"]) { + if ([self withToggleButton]) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; } - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardStartedEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasDismissed:) name:UIKeyboardWillHideNotification object:nil]; + } } +- (void)keyboardDidShow:(NSNotification *)note +{ + self.keyboardDidShow = TRUE; + if ([self.assignedTextField isFirstResponder] && self.newButton) [self addButtonToKeyboard]; +} -- (void)keyboardStartedEditing:(NSNotification *)note { - - //This removes the button if we go to a different textfield. - - if ([self.assignedTextField isFirstResponder]) { - - //this will catch if a keyboard was already present and we changed first responder to our keyboard and need to add the button. - if (self.newButton && self.keyboardDidShow) { - //NSLog(@"keyboard started editing and newButton is needed and the keyboard is already visible"); - [self addButtonToKeyboard]; - } - - //textfield must have something in it otherwise this will crash. - if ([self.assignedTextField.text length] == 0 && self.assignedTextField.delegate == self) { - self.assignedTextField.text = @"$0.00"; - } - - self.toggleButton.hidden = NO; - self.toggleButton.userInteractionEnabled = YES; - - } else { - - self.toggleButton.hidden = YES; - self.toggleButton.userInteractionEnabled = NO; - - } - +- (void)keyboardStartedEditing:(NSNotification *)note +{ + if ([[self assignedTextField] isFirstResponder]) { + if ([self withToggleButton] && [self newButton] && [self keyboardDidShow]) [self addButtonToKeyboard]; + if ([[[self assignedTextField] text] length] == 0 && [[[self assignedTextField] delegate] isEqual:self]) { + [[self assignedTextField] setText:[[self formatter] stringFromNumber:[NSNumber numberWithFloat:0.0]]]; + } + [[self toggleButton] setHidden:NO]; + [[self toggleButton] setUserInteractionEnabled:YES]; + } else { + [[self toggleButton] setHidden:YES]; + [[self toggleButton] setUserInteractionEnabled:NO]; + } } -- (void)keyboardWasDismissed:(NSNotification *)note { - - - if ([self doesAlertViewExist]) { - //alertViewExists therefore uitextfield will soon be released stop watching for events now to fix memory management bugs. - [self endWatchingForKeyboard]; - } - - self.newButton = TRUE; - self.keyboardDidShow = FALSE; - //NSLog(@"Button is gone"); - +- (void)keyboardWasDismissed:(NSNotification *)note +{ + if ([self doesAlertViewExist]) [self endWatchingForKeyboard]; + + [self setNewButton:TRUE]; + if ([self withToggleButton]) [self setKeyboardDidShow:FALSE]; } --(void)endWatchingForKeyboard { - - //NSLog(@"end watching for keyboard"); - - [[NSNotificationCenter defaultCenter] removeObserver:self]; - +- (void)endWatchingForKeyboard +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark Private Methods --(void)addButtonToKeyboard { - - //NSLog(@"add Button"); +- (void)addButtonToKeyboard +{ + NSInteger viewIndex = ([self doesAlertViewExist]) ? 2 : 1; + UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:viewIndex]; - //If a alertview is present with a textfield the viewIndex will be different than 1 - NSInteger viewIndex = 1; - - if ([self doesAlertViewExist]) { - viewIndex = 2; + for (UIView *keyboard in [tempWindow subviews]) { + if ([[keyboard description] hasPrefix:@" 0) { - - [self.assignedTextField.delegate textField:self.assignedTextField shouldChangeCharactersInRange:NSMakeRange(0, 1) replacementString:@"-"]; - } +- (void)toggleButton:(id)sender +{ + if ([[[self assignedTextField] text] length] > 0) { + [[[self assignedTextField] delegate] textField:[self assignedTextField] shouldChangeCharactersInRange:NSMakeRange(0, 1) replacementString:@"-"]; + } } -- (BOOL) doesAlertViewExist { - - for (UIWindow* window in [UIApplication sharedApplication].windows) { - for (UIView* view in window.subviews) { - BOOL alert = [view isKindOfClass:[UIAlertView class]]; - BOOL action = [view isKindOfClass:[UIActionSheet class]]; - if (alert || action) - return YES; - } +- (BOOL)doesAlertViewExist +{ + for (UIWindow* window in [[UIApplication sharedApplication] windows]) { + for (UIView* view in [window subviews]) { + if ([view isKindOfClass:[UIAlertView class]] || [view isKindOfClass:[UIActionSheet class]]) return YES; } - return NO; + } + return NO; } #pragma mark UITextField Delegate Methods -- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { - - textField.text = [MSCurrencyFormatter formatTextField:textField withCharactersInRange:range withReplacementString:string]; - return NO; - +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + [textField setText:[self formatTextField:textField withCharactersInRange:range withReplacementString:string]]; + return NO; } #pragma mark Class Methods -+(NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NSRange)range withReplacementString:(NSString *)string { - - //If user types a - just flip/flop to a negative or positive number. - if ([string hasSuffix:@"-"]) { - if ([[textField.text substringToIndex:1] isEqualToString:@"-"]) { - - return textField.text = [textField.text substringFromIndex:1]; - - } - - NSString *newString = @"-"; - return textField.text = [newString stringByAppendingString:textField.text]; - - } - - //This is for if we're removing the negative - if (range.location == 0 && range.length == 1 && [string isEqualToString:@""]) { - - return [textField.text substringFromIndex:1]; - - } - - NSInteger currencyScale; - - //setup formatter - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; - currencyScale = -1 * [formatter maximumFractionDigits]; - - //First analyze string for numbers only. - NSMutableString *filteredString = [NSMutableString stringWithCapacity:textField.text.length]; - NSScanner *scanner = [NSScanner scannerWithString:textField.text]; - NSCharacterSet *allowedChars = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; - - while ([scanner isAtEnd] == NO) { - NSString *buffer; - if ([scanner scanCharactersFromSet:allowedChars intoString:&buffer]) { - [filteredString appendString:buffer]; - } else { - [scanner setScanLocation:([scanner scanLocation] + 1)]; - } - } - - NSString *enteredDigits = filteredString; - - - // Next Check if it is negative and remember that. - BOOL isNegative = FALSE; - - if ([[textField.text substringToIndex:1] isEqualToString:@"-"]) { - - isNegative = TRUE; - - } - - - //only allow numbers to be entered via keypad/keyboard - NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; - for (int i = 0; i < [string length]; i++) { - unichar c = [string characterAtIndex:i]; - if (![myCharSet characterIsMember:c]) { - - return textField.text; - } - } - - // Check the length of the string - if ([string length]) { - if ([enteredDigits length] > 10) { - //This makes sure that we don't have a long price. - - return textField.text; - } else { - - enteredDigits = [enteredDigits stringByAppendingFormat:@"%d", [string integerValue]]; - - } +- (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NSRange)range withReplacementString:(NSString *)string +{ + NSString *minus = @"-"; + + if ([string hasSuffix:minus]) { + if ([[[textField text] substringToIndex:1] isEqualToString:minus]) { + return textField.text = [[textField text] substringFromIndex:1]; + } + return textField.text = [minus stringByAppendingString:[textField text]]; + } + if (range.location == 0 && range.length == 1 && [string isEqualToString:@""]) { + return [[textField text] substringFromIndex:1]; + } + + NSInteger currencyScale = -1 * [[self formatter] maximumFractionDigits]; + NSMutableString *filteredString = [NSMutableString stringWithCapacity:[[textField text] length]]; + NSScanner *scanner = [NSScanner scannerWithString:[textField text]]; + NSCharacterSet *allowedChars = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; + + while ([scanner isAtEnd] == NO) { + NSString *buffer; + if ([scanner scanCharactersFromSet:allowedChars intoString:&buffer]) { + [filteredString appendString:buffer]; } else { - - // This is a backspace - NSUInteger len = [enteredDigits length]; - if (len > 1) { - - enteredDigits = [enteredDigits substringWithRange:NSMakeRange(0, len - 1)]; - } else { - - enteredDigits = @""; - } + [scanner setScanLocation:([scanner scanLocation] + 1)]; } - - NSDecimalNumber *decimal = nil; - - if ( ![enteredDigits isEqualToString:@""]) { - decimal = [[NSDecimalNumber decimalNumberWithString:enteredDigits] decimalNumberByMultiplyingByPowerOf10:currencyScale]; + } + + NSString *enteredDigits = filteredString; + BOOL isNegative = [[[textField text] substringToIndex:1] isEqualToString:minus]; + + NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; + for (int i = 0; i < [string length]; i++) { + if (![myCharSet characterIsMember:[string characterAtIndex:i]]) return [textField text]; + } + + if ([string length]) { + if ([enteredDigits length] > 10) { + return [textField text]; } else { - decimal = [NSDecimalNumber zero]; + enteredDigits = [enteredDigits stringByAppendingFormat:@"%d", [string integerValue]]; } - - // Replace the text with the localized decimal number - - NSString *results = @""; - - if (isNegative) { - results = [NSString stringWithFormat:@"-%@",[formatter stringFromNumber:decimal]]; + } else { + NSUInteger len = [enteredDigits length]; + if (len > 1) { + enteredDigits = [enteredDigits substringWithRange:NSMakeRange(0, len - 1)]; } else { - results = [formatter stringFromNumber:decimal]; + enteredDigits = @""; } + } + + NSDecimalNumber *decimal = nil; - return results; + if (![enteredDigits isEqualToString:@""]) { + decimal = [[NSDecimalNumber decimalNumberWithString:enteredDigits] decimalNumberByMultiplyingByPowerOf10:currencyScale]; + } else { + decimal = [NSDecimalNumber zero]; + } + + NSString *results = @""; + if (isNegative) { + results = [NSString stringWithFormat:@"-%@",[[self formatter] stringFromNumber:decimal]]; + } else { + results = [[self formatter] stringFromNumber:decimal]; + } + return results; } -+(NSDecimalNumber *)decimalNumberFromFormattedString:(NSString *)string { - - NSMutableString *strippedString = [NSMutableString stringWithCapacity:string.length]; - - NSScanner *scanner = [NSScanner scannerWithString:string]; - NSCharacterSet *numbers = [NSCharacterSet - characterSetWithCharactersInString:@"0123456789.-"]; - - while ([scanner isAtEnd] == NO) { - NSString *buffer; - if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) { - [strippedString appendString:buffer]; - - } else { - [scanner setScanLocation:([scanner scanLocation] + 1)]; - } ++ (NSDecimalNumber *)decimalNumberFromFormattedString:(NSString *)string +{ + NSMutableString *strippedString = [NSMutableString stringWithCapacity:[string length]]; + NSScanner *scanner = [NSScanner scannerWithString:string]; + NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789.-"]; + + while ([scanner isAtEnd] == NO) { + NSString *buffer; + if ([scanner scanCharactersFromSet:numbers intoString:&buffer]) { + [strippedString appendString:buffer]; + } else { + [scanner setScanLocation:([scanner scanLocation] + 1)]; } - - return [NSDecimalNumber decimalNumberWithString:strippedString]; - + } + + return [NSDecimalNumber decimalNumberWithString:strippedString]; } - -@end +@end \ No newline at end of file From d9dea724c5e44ff4d0d4f8824e741b3356af05d5 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Fri, 25 Jan 2013 19:34:49 +0200 Subject: [PATCH 02/13] MIT license added --- LICENSE | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a0b785b --- /dev/null +++ b/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright © 2012-2013 Brandon Butler, https://github.com/Hackmodford + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file From 9e3332010f5b6deef06f0968c586f4868b060ae5 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Fri, 25 Jan 2013 19:39:56 +0200 Subject: [PATCH 03/13] Podspec added --- MSCurrencyFormatter.podspec | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 MSCurrencyFormatter.podspec diff --git a/MSCurrencyFormatter.podspec b/MSCurrencyFormatter.podspec new file mode 100644 index 0000000..874e27e --- /dev/null +++ b/MSCurrencyFormatter.podspec @@ -0,0 +1,13 @@ +Pod::Spec.new do |s| + s.name = "MSCurrencyFormatter" + s.version = "0.0.2" + s.summary = "A piece of code that will automatically format a UITextField with a numberpad to behave like an ATM." + s.homepage = "https://github.com/sxua/MSCurrencyFormatter" + s.license = 'MIT' + s.authors = { "Brandon Butler" => "", "Olexandr Skrypnyk" => "ukraine.sax@gmail.com" } + s.source = { :git => "https://github.com/sxua/MSCurrencyFormatter.git", :tag => "0.0.2" } + s.platform = :ios, '5.0' + s.source_files = 'MSCurrencyFormatter.{h,m}' + s.resources = "toggleButton{Down,Up}.png" + s.requires_arc = true +end From 25b539a47991087965a92c30d4e186f7df204dcf Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Sun, 27 Jan 2013 16:30:58 +0200 Subject: [PATCH 04/13] set UITextViewDelegate methods with blocks --- MSCurrencyFormatter.h | 5 +++++ MSCurrencyFormatter.m | 36 ++++++++++++++++++++++++++++++++++-- MSCurrencyFormatter.podspec | 4 ++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/MSCurrencyFormatter.h b/MSCurrencyFormatter.h index e48b2b7..70aac9a 100644 --- a/MSCurrencyFormatter.h +++ b/MSCurrencyFormatter.h @@ -10,6 +10,11 @@ @interface MSCurrencyFormatter : NSObject +@property (nonatomic, copy) void (^textFieldShouldBeginEditingBlock)(); +@property (nonatomic, copy) void (^textFieldDidBeginEditingBlock)(); +@property (nonatomic, copy) void (^textFieldShouldEndEditingBlock)(); +@property (nonatomic, copy) void (^textFieldDidEndEditingBlock)(); + - (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton; - (id)initWithLocale:(NSLocale *)locale; - (void)startWatchingForKeyboardFromTextField:(UITextField *)textField; diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index 6d7ea3e..a96180f 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -151,8 +151,6 @@ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRang return NO; } -#pragma mark Class Methods - - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NSRange)range withReplacementString:(NSString *)string { NSString *minus = @"-"; @@ -222,6 +220,40 @@ - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NS return results; } +#pragma mark UITextViewDelegate + +- (BOOL)textViewShouldBeginEditing:(UITextView *)textView +{ + if (nil != [self textViewShouldBeginEditingBlock]) { + [self textViewShouldBeginEditingBlock]; + } + return YES; +} + +- (void)textViewDidBeginEditing:(UITextView *)textView +{ + if (nil != [self textViewDidBeginEditingBlock]) { + [self textViewDidBeginEditingBlock]; + } +} + +- (BOOL)textViewShouldEndEditing:(UITextView *)textView +{ + if (nil != [self textViewShouldEndEditingBlock]) { + [self textViewShouldEndEditingBlock]; + } + return YES; +} + +- (void)textViewDidEndEditing:(UITextView *)textView +{ + if (nil != [self textViewDidEndEditingBlock]) { + [self textViewDidEndEditingBlock]; + } +} + +#pragma mark Class Methods + + (NSDecimalNumber *)decimalNumberFromFormattedString:(NSString *)string { NSMutableString *strippedString = [NSMutableString stringWithCapacity:[string length]]; diff --git a/MSCurrencyFormatter.podspec b/MSCurrencyFormatter.podspec index 874e27e..bcb5ebd 100644 --- a/MSCurrencyFormatter.podspec +++ b/MSCurrencyFormatter.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = "MSCurrencyFormatter" - s.version = "0.0.2" + s.version = "0.0.3" s.summary = "A piece of code that will automatically format a UITextField with a numberpad to behave like an ATM." s.homepage = "https://github.com/sxua/MSCurrencyFormatter" s.license = 'MIT' s.authors = { "Brandon Butler" => "", "Olexandr Skrypnyk" => "ukraine.sax@gmail.com" } - s.source = { :git => "https://github.com/sxua/MSCurrencyFormatter.git", :tag => "0.0.2" } + s.source = { :git => "https://github.com/sxua/MSCurrencyFormatter.git", :tag => "0.0.3" } s.platform = :ios, '5.0' s.source_files = 'MSCurrencyFormatter.{h,m}' s.resources = "toggleButton{Down,Up}.png" From f4f1ccf122e55c5257dff61610b364fe47444938 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Sun, 27 Jan 2013 18:54:55 +0200 Subject: [PATCH 05/13] should be UITextFieldDelegate --- MSCurrencyFormatter.m | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index a96180f..d34835f 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -220,35 +220,35 @@ - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NS return results; } -#pragma mark UITextViewDelegate +#pragma mark UITextFieldDelegate -- (BOOL)textViewShouldBeginEditing:(UITextView *)textView +- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { - if (nil != [self textViewShouldBeginEditingBlock]) { - [self textViewShouldBeginEditingBlock]; + if ((void (^)(void))self.textFieldShouldBeginEditingBlock) { + self.textFieldShouldBeginEditingBlock(); } return YES; } -- (void)textViewDidBeginEditing:(UITextView *)textView +- (void)textFieldDidBeginEditing:(UITextField *)textField { - if (nil != [self textViewDidBeginEditingBlock]) { - [self textViewDidBeginEditingBlock]; + if ((void (^)(void))self.textFieldDidBeginEditingBlock) { + self.textFieldDidBeginEditingBlock(); } } -- (BOOL)textViewShouldEndEditing:(UITextView *)textView +- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { - if (nil != [self textViewShouldEndEditingBlock]) { - [self textViewShouldEndEditingBlock]; + if ((void (^)(void))self.textFieldShouldEndEditingBlock) { + self.textFieldShouldEndEditingBlock(); } return YES; } -- (void)textViewDidEndEditing:(UITextView *)textView +- (void)textFieldDidEndEditing:(UITextField *)textField { - if (nil != [self textViewDidEndEditingBlock]) { - [self textViewDidEndEditingBlock]; + if ((void (^)(void))self.textFieldDidEndEditingBlock) { + self.textFieldDidEndEditingBlock(); } } From f824d7885c94c4a585d2e63357b45b8587236927 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Mon, 28 Jan 2013 15:32:15 +0200 Subject: [PATCH 06/13] blocks now accepting textField parameter --- MSCurrencyFormatter.h | 8 ++++---- MSCurrencyFormatter.m | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MSCurrencyFormatter.h b/MSCurrencyFormatter.h index 70aac9a..ee32b56 100644 --- a/MSCurrencyFormatter.h +++ b/MSCurrencyFormatter.h @@ -10,10 +10,10 @@ @interface MSCurrencyFormatter : NSObject -@property (nonatomic, copy) void (^textFieldShouldBeginEditingBlock)(); -@property (nonatomic, copy) void (^textFieldDidBeginEditingBlock)(); -@property (nonatomic, copy) void (^textFieldShouldEndEditingBlock)(); -@property (nonatomic, copy) void (^textFieldDidEndEditingBlock)(); +@property (nonatomic, copy) void (^textFieldShouldBeginEditingBlock)(UITextField *textField); +@property (nonatomic, copy) void (^textFieldDidBeginEditingBlock)(UITextField *textField); +@property (nonatomic, copy) void (^textFieldShouldEndEditingBlock)(UITextField *textField); +@property (nonatomic, copy) void (^textFieldDidEndEditingBlock)(UITextField *textField); - (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton; - (id)initWithLocale:(NSLocale *)locale; diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index d34835f..0a797d9 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -225,7 +225,7 @@ - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NS - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if ((void (^)(void))self.textFieldShouldBeginEditingBlock) { - self.textFieldShouldBeginEditingBlock(); + self.textFieldShouldBeginEditingBlock(textField); } return YES; } @@ -233,14 +233,14 @@ - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField - (void)textFieldDidBeginEditing:(UITextField *)textField { if ((void (^)(void))self.textFieldDidBeginEditingBlock) { - self.textFieldDidBeginEditingBlock(); + self.textFieldDidBeginEditingBlock(textField); } } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { if ((void (^)(void))self.textFieldShouldEndEditingBlock) { - self.textFieldShouldEndEditingBlock(); + self.textFieldShouldEndEditingBlock(textField); } return YES; } @@ -248,7 +248,7 @@ - (BOOL)textFieldShouldEndEditing:(UITextField *)textField - (void)textFieldDidEndEditing:(UITextField *)textField { if ((void (^)(void))self.textFieldDidEndEditingBlock) { - self.textFieldDidEndEditingBlock(); + self.textFieldDidEndEditingBlock(textField); } } From 17001c7b7342f9d51e03c54001e5cc1197f4ecbe Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Mon, 28 Jan 2013 17:50:53 +0200 Subject: [PATCH 07/13] update pod source --- MSCurrencyFormatter.podspec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MSCurrencyFormatter.podspec b/MSCurrencyFormatter.podspec index bcb5ebd..8d44e94 100644 --- a/MSCurrencyFormatter.podspec +++ b/MSCurrencyFormatter.podspec @@ -2,10 +2,10 @@ Pod::Spec.new do |s| s.name = "MSCurrencyFormatter" s.version = "0.0.3" s.summary = "A piece of code that will automatically format a UITextField with a numberpad to behave like an ATM." - s.homepage = "https://github.com/sxua/MSCurrencyFormatter" + s.homepage = "https://github.com/unteleported/MSCurrencyFormatter" s.license = 'MIT' - s.authors = { "Brandon Butler" => "", "Olexandr Skrypnyk" => "ukraine.sax@gmail.com" } - s.source = { :git => "https://github.com/sxua/MSCurrencyFormatter.git", :tag => "0.0.3" } + s.authors = { "Brandon Butler" => "", "Olexandr Skrypnyk" => "sxua@unteleported.com" } + s.source = { :git => "https://github.com/unteleported/MSCurrencyFormatter.git", :tag => "0.0.3" } s.platform = :ios, '5.0' s.source_files = 'MSCurrencyFormatter.{h,m}' s.resources = "toggleButton{Down,Up}.png" From 838b15a2551b0c77ee5ddbe270e308e363ddcd4e Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Tue, 29 Jan 2013 00:42:35 +0200 Subject: [PATCH 08/13] textField now resign first responder on return --- MSCurrencyFormatter.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index 0a797d9..bef7c03 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -222,6 +222,12 @@ - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NS #pragma mark UITextFieldDelegate +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + [textField resignFirstResponder]; + return YES; +} + - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { if ((void (^)(void))self.textFieldShouldBeginEditingBlock) { From d837f2619f4f9f49bf66164b0f23bfd1b8512621 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Tue, 29 Jan 2013 02:27:43 +0200 Subject: [PATCH 09/13] optimize toggle buttons --- toggleButtonDown.png | Bin 4128 -> 2732 bytes toggleButtonUp.png | Bin 4750 -> 2672 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/toggleButtonDown.png b/toggleButtonDown.png index 1c1e4544250d52a39043d1f5d35ec696990a795f..16fd808f62c041461afe8bd1124e2d6d509b70fa 100644 GIT binary patch delta 2696 zcmWmGc{G%37yxjU3e{ECB$PFVWXsyP3Slr~pD|{}5HrJ=v5f39c9kScwh^*cw#bdH ztQoFkxs&bMMkv{hrA)T_Ip=rYKi+e`?|Gl+Iqy<%r9$|r7|#hVF0O;ALwt&c67ASy zn5Df5FmdeIv9ss+1%)mO3X6$cyexTDUh1lXl8P2cRa;XVtZQIwU}OotV+}Tj8XCiH zo7tO~+nGQdO)U`?P=o~xWnqJcz?>m4B*fMQVvDh~L0a0lSlVH&?A@##0Pavnz&)4~ zz{3U(@U%sE+R_j>JA{XwGtSN#Z|{t=N8;^~1P2$qg9|WvIl2%WQC^NHZznW>2uFLt zF+@1V2jL1JIb#82q#MB3#U0>>x(Dz_djJA3p8gn5V5GR>0D)LM;JzCH5ajL!2)^eH zpoMr40im8gfG`{h5RUiu$CJbHT|bkHi>K7w z*vLM3Y|;ghENmhKo=1~l((!F_*1>A*V?uXY&$rLqxbY`&L5Jzgk%QQZ^hG{35M;g@#07A_Ba0Awvs^^DhFhNig@x z-PMfpu)z1*8D7xHXVWA7>jtu@p@L{5t;kew0iu!k4!AW~C;n^jOT!_PwFQr*FKaIP zeih0sA`i*d=c*Qkk*nw}7MXn#{&Wub__6_Bw2%LN8&VRkl`y2fwf(pfw|Z4dKVxph zV~0e0KFF=zn+t1nx&QIC05~ z?n^Ih!i9AVzjaECIbI>#a?tTsOF!h=Uav*tcV)(&IrhvLOxkAi`xLVG z4xLieBZ3ijmE&lgVy!y6TR;45NnquOx_X;ai#k}L>oX%u2VOC61TgMo|gNG0_0pSe=d^&V9rE2d5iuz>Qefsx2PT}Wk zM|n12#(htSzcn#ho>V=?f1aq)m)tczlhs}f8J?7S!>9XTe-8(LPj@v+#Ta(EM=%!t zs6d)(S+`_Lj}9$i!_$rmJ$qgvCa<`r^4y`k{Y7MDel$%)(J__vfKs*~J=SunkV&dFtEjeX>( zJbhxBbJ*f^Ko0_?Pj3OK-1m8#UbS6QySKP>l_zg4cG(Cs4quKw_=(;8mC{Ui zKz`_lwy{R;u$gmvo!2ES6R+s1W+lRU6@&?;io2^FJXFjU)?=sFS&wH*u3N=0|J-8V z3Jn#z{G~LUJ;6oYd7b?1n-fFTA+*Rb!htznN%>3GK`U%cPqFR;V|-)MSXRp`+3@si zIbWkIBuH_2t3G<~wBvDUi(0O8o2kJ>RS6RjpcS$-Db(K2*FeJGFh4u&Rn!uKaasec#7{mh7|U zCX4_JqIG21vS1Xg`Pko!= z$=vwLto>DfbP#oS(HFEcbNEO4o4dl5%{Ij4nn8KbrEF_!xEJgz&bDL+>+g2K2E}cZb%^^8}wW3=Lbz1Pvi|)XMhz~vm0g)7!dQ(-Ses|wDq+lKd=KK-f?voBDg+# z^WdCWy#ih@zfopZ9zXVZ&j5%SBI+A9)GhW`W+TU#UiWCQ#Fvd2bS<}xON6~)h_?sX25R`TC*{Q1MJBN7vi)~)szk`o-4$C>MZ$ic;^f~r1I zec~N;G~7fONvv^=-*0#1=nhG}4;j5a5H&9!OQx1#85}QPaB|=o1A$Peqd4?@naVf0yn2_9x&ypr#0q~aRLRKH8Xn+ zHTqd3=xE5&PwwZg6!m-VAV2EFKi(Hew1L_F7Z*Vv$?rJ%o4Dy+%_p?oCa$BRSyd+m z;3)$F#?0MV$hV=H59L}iOjg&63<%*zPcTAohLB5TTRu@%XrmtG@ zujs84WYeE7e-vpd^K2~5@2vklrMJFP7H27&0R0%PX;>Ak$BC46(kQ_i>7x~>H1cSot0}^Qbi8l(R>uFe)1SvxGsbyNU{&+!BA87^}ZYvZchuF?Mk2^LTF literal 4128 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 Cim`(L diff --git a/toggleButtonUp.png b/toggleButtonUp.png index 2674af93dab51dacc57c1c66616df19645aef2b3..28bcc635c4ead22be48e1ec472e3189bea1eb5fb 100644 GIT binary patch literal 2672 zcmW;N3p|ti9|v&K#h>KTAtaJIl}p+oe>ppxa$OfWi`L{43(56FSy7z|E7WQ(L$XS9 zU(4C#y3Ku9Ywlxqq2(H5C`9)E?f<;qzt8V^eSfd#dHr6`^L<{=V-I&%H5Gjo1qB5) zn41$E%spUSQ&s}GA(UMO(|@AfkTD7hsypRFQ6V=^7ZkU}!p=Hx<0~6#?l7RQ5RDWR zHo-j3cshe6MftJGz+jKL`4MvqODk&|>;Kx@K^^V>aQyubCudi8XE%2j*HbPa-OjnX zo%Zn$_PreJ7ZBnXa5VrGf(i<~77-H`5gQg68yX%=Po8C9pX0GOAp2Q*_VbKfTt*HqGdCma#f$ucm#+#73Q5G`cZDV7qSE(8 zWfdjm6{RFf8HrNz-|TFflqBf2f$%=d}4y^1BiL>iZj z`sIfExx)j%Ai(DWLx5lq-~qxRU>Feb0KRBgZe&<6!j~K63r7WVp9P}NLOHQ;L@XK+ zk55dEPfSk$lhZPpY?q1pvb>oBPrEub{fwgbfu1A5oKAS6d4jyPR4=bzn9FgJG+546 zZ-(jNt{lPB5GtJRLkA83(@Fd%?y!^evL!4sn6}!a5r7aZzjgBi)bZHdM9y z{ks+sFHDt z?BXgj@urJi83;2k29fEmIhXDiL$SwOLn2I zKV1cO`l~@6qzN^CP0Ml%PC4iVZuI4!W<9#tx#ri0cjJ>y@W}&;+oiUc5r~?jUrauU zvGRWGWrH%7@(}h{u=7y56S_I3L{EGxliD_(Zi?67@N}`1mzUjePH*?aDNi7VAzNX@ zSoA|&A{z5*xea}$>VaNTNXJ1BA^GPQ7-z-lS|T%c(7zJtw8LviGfkR(^QX(VV_7Mf znTdrxzRBn_At%_!GAth^WERD>p%W$^z;MY22xnKK$C}~p^)BeV9mGb=ZbA@Rb1Cn1 zzXrDVHSz$a)W_^gq8a-)B`BS3CaHg2scrY`aTBO}(y4kzQ4WS9gQ`v&>~}^%>3Z8+ z_XXJpk##>ywfkHwQRMl6@JB_au=u1f8a&7xHD}!}W>INPM3+0z!e_dpw=z3_aEdR| zx9fkF-YVX)z}=tuCNNF9Vtz!=UWWLVV$&{mnzY49=-ITBp+s?q0(R%$>cJlikW1wO zh6n%Umy(XhRBHR4YFC~sdpoqmw|V|uL7JOOd($46|+6(@& zk?}db2bKsr8K-l*C;#uV^QtKA1=qVV|2?<85pQOMu`8`Rso%Qb=Uz-)=}?vAe{-B4 z>tr^X@A`4z@w5GC%*al27|HzJ=%2%XEPC9bUs=sIU?-Jad26AAUP5C14s!?_-RyfI z%JP-)8nXh#ZLFLAIu6$@Y(>ky#aV5v%tcP2x6p%E2OWwl$rblr{#HS?hTKIgN2!a8 zHvVRD5hGz)*p4%MZt}d1F^7ncrE_eru&1)P(%F1J1&R(o(_b(uRs1OlGpb@MerexlTe#kH>7Gw(rn3g~g!R#^@OMpIbEA0i_fy?> ztM|o+kjXv&I3#one!{io+j)V1FjMfaf0&la>YYF#Zzw2Oy-JXd%@AWujp`P@rxg0b z;+>~`jT!!)Q?n9L4nc5Z=YiGNolJ>&Z61t4$mO{rbKz#^gxc#pStjv#aD+Zk9+YD`U?DycA@sP?>G)NoDpr+$!Fu7%5 zGYZQK{_?G;PF0pPy z*K3Ig1*_bY3wM;DHYT@xOmy}?p2b)-ESh=^spIYL^&Q2sXY*`W>I(A>82-Mpno+g+ z!3d@H-Ne8+ShanWo{_ruNwB^=F_ZWXb4q7J0BjDV#TjifE0>X4bC!^)x&8 zB9%=JFbpHp7Eg!yF05-*nG$6=t{>E-7h`5$`g^C_J9sWH>+651_`zGFVfx2rw1tDt z3~tv^Y(HKwI0lKk6+SQG9LnI|``)c|Z&i7d;Jm{G*as)1rePcBLH?ro6k~3$&q)_F zl&g}A&oe+B*&Z3BFP668_UcrGN3X<-%v$r~)WGlk6xO`F$^FD0lQ^UD!kn%~nRS|oNUtMeIWB+7^X zMSMA;g@W?mc)?ZR78ys$t#hdq3R)|kWkYr(>{MS*Bd1+ zUf^pS+6TW?#IaYK^0#)Hq8QVcuM3q_Ly3i33(W&x_)Y2sg+5|hnQ!X5&L8JG*E#2XmivC5=YHR<^U30=eEcjR5NH6zVaK?!xSARofarg( z(vMXcX(G}97ueW9*Cu3cv&h_E!jSV>O_8I4*hP0gdD%g>c`(X3X} zX-|`ArlXXHtgnae4@lDEZc@%2`+Vk}(Vn1I8AJ;NXnnpyzknj;klXC~u09adP~7J@ zYb}6CKm%(yP=usKA6s8vXuQmSeh(fdC!vyYRYbd&tp8#EOucWP3tHoa%L;J>q)O*KidDd!RQ)bsaX0!czbC7b zAuA`aiVkW#m!Y_4er4OA;m7{=p^Zc5n!a(F!Jlr-(rHttp9+Q04r@iTlWMBYuwo8N zJN#S7IJl$`q|=`^NlpSTp)5J#u_{mTF{+R98`4cJ0XTENa{Jf`LbK!@GqG#2GHhp; z*o9oBBi-_p9Sh(p2)t7_Q5^PjG+Q=45jZa*aa`h7ukGV>b$@|fB`D|lxMNLJOhuinJF!_-D{;G`Q&2Z+5*U30@Oa>A?tPZ6B@K-Sa-uSyd_ z;NGQLBwbbZ9lB=2ryx|YL2D`(PG)fm+_TMA2*^Fv<0k#~;9i4h7dfefu)kIaG=2~1 zsY&@c)k!Mt7En5_#%o$rjTOt+%E>J(**7;>{L~XS%ZQQ@zs86? zIp)=T`*EHGT_DZ(_$VXmIXJ?`LB7WztTN2A@tK~#mT%(H4*oEmKgFP|bj95L!$gA% z6@%+5p``U!WZaspmiCLUE(NTycQ^Zncg}@QzL_JD81WWS9n+8| zmbKrn$q|y!)Sz|4hvPWgxL5X;8E^ijMhMEWI>mi?HB~2-w?=_?TX;k;V*ARmeZUEOaYWox#~oMpe`=q^&DaR0*7G86Q}?bJl&YZT*Zm+kU{ zRl(<-Bp)iqsgI~+*$m#Be&aJfVu)5a{lZfG8PAI{wNC>+XSdygIK~)|2~rVRZY!l; z4s72#rA|5SdU_{ZgkN*H)USY1Flsk&6UX0SG6SOF&BPZZFg*}~Th7N|_>&#FF`{iP zxt|u*WQE#Y`79JzMCMamSkWADFWI_7>>PF&i9dlrjhUqd-&`DDvc04#uxalyJTz16 zjS;!5LfODiECkX{vtcVI|BGQ+HQFZFw0fiRXp9h!VC%dw(Y+jmzXfFG z{=;0z)r`j&>r7R534Mzaf`E%;GJUPkd%nq*!%5=84r2dL<}KUZ(nCLI=0|VZ&ZD*d z+;4Shqe8BuqI!~l#}dw)ViV!5`w@JW73dW>7`gz$NopFkNuoa^J@$~d9e z`z$Q@AVNONHr|F&^u!fOiczC(o{tD0HObglx34;#-KG{eo%F=}_l$g%M37a*n*|2B zc()F*YUq`$t>Yq3Qd_xGE^x?bOc({QFPA@iXOdTkdCiCeih@>;k9D4|PGobRG=Zsp z$(je)iUuDdIVGYa=-ZXeNQ&(U$HA^#A$mYJ3XRsi2 z2*XET%GHwWd#q*G3d7_))m@?h^eemWTX>Elj`l!P^4ecE6ZS_hp5+JYlYEobz{!c< z?45spJ!Ko$B0M+EXcif`jP=7c=Se$YfRa7Jq5H}v4-%PXbfz_ba>bh6!iQBM?<;s1 zc=U+9;b?st1bQ2Br14>I4%%>@{#qM=va+jqaR{((YzN+BmkwwTv`9w^**x`}PnITN zqjw+zLS`knu=S}dJZ^$OJXYG7-E_MwyP_QqYhY#@L&|&I&8RtkZm`eSIue+&8!Pw> z?EhY*Ufd))sME|NX!raO&-0BvW>Zq@Cxdj8?fY54!?)BNA*j`unftWyn5u{2kCcx- zp@0n&lK=M3{;NhEv--J*ex4SyWw?sr=r0qIvVN|%m0IV$e{Zm`J<=r;i#~9aTn$l} zHPqCczY`B+l%R4F6*~`NxPWF`Vo*dFd}AVVL;hx_?Wok^a3noOC+yPUQC-`@{Usf> zc1_ET2b)f6v_UGhIlZ?cZH&*;Y-z>#Q_Yp>`BJE;l_suZM;}b@>beiv+$6fg+f%7I zKPmo|(ETw3$;V$3Pw<>djz=RlGw+)I@ev&9*wTm4*VZlxKm$cMv0p){{ z)p%P-ev+Yb;lGFG(@il+A@MSE_tm-@N?S<6o19+e^UW)S3b;7^V@Af1_T0j3aTPyr z6rD>4;5g%VCAVH6w7lvRtk`d0_bsy5xm_;iviNJoi!*2z!k3W)xpnfm_jekN*1L@A z8Nqq_T^VhP&o-(AqU67s<2)SZ7)dnc5pJHpeP`Cn{XY-UTo*TaR5qwm`w+Wv<|ropWrj zdmrp>L#b>=(hKi%<_s;nhxhi}GX2Hq+~G9G`{l>XE@<2a(nf9;j^sRxQTX$neLzfU z!nB1y=B~zTMaS#x>GnGGF-Z8)3pCmc?59D8h0|*Kqo3=X_TQDCn6WKyzI}z=F;^qe z@#lwI+?fCv_UfJ@Pa)gDi`$*}KO`u%i)y%*(9$-zjiP?BoZMOH2s#WWH~iSyx8aef zZhd3L_g|xMg7D8I58mpRs`h?G{e?JAOZC{kjZSBEdO`4mX2MfSR!J(oai@lG1h^)i zwO|r}KqR4Kj-CQt6p~Xff!KV*GE6V}zWwDO51=rW%i(w1an~WXM*DU}ZttYnM18Fh zAr!cBr$|KSd|}gZ2HxjFwtfVGK<(NyhL!xx+{oYGww;y;ME5-1L5@Y+3aQ$_ho!D5 zH(eb9JJ9u5ad3-ASN=;4IBm>SYzrbW-g)#fA`SIqj@(a%l6FS2QQjjKnHQqUee+a- zVzZacG-atM$Z61n;Ud3*imV%ldT>!>(6T2^G>X3U(4t`G`{6<1lV_M647ee9)^)g; zZby#DkA-~`aDK&k^-o`16isaqDr|D?;76JhK9Q2JU-20T3p+)u-23)>A!-#hG=gh; zS=a2cdiAZatf7gx2MlgQv%iW9-4X@nZ!hVnheCwH8L?SvvuSE-@|MukwdpYa>sIoY zBr=8rfCGWK_(au)LtkWW#)a8W*nl&Zk!(1=9o(m*0tp(rT+45%Y{zMpP%=rIlJR~A zdp%+AgY?WZV2WAv7oi~D5Jxe~2FPoP{l-j7D(QY>V++z;lzc9hWP4 zcp7F`ZMtvjBq%$|mybnSi!FO>!4JKHgZE8HPAvo?jWmpM?XZl#=(6lIIcc#Q==aWT z!^h)#$yr7x*Pyu{r5XMA-u0f$QNTmBw_)X(;Hq6_2P~wIF%5prO#j$(#(d=qUhBAN zY&U#P@MVwOJALr-w_f2)An=BDB>YIGr7~*7**osiG zn)dRWWWm{Tu@Iw2_w4ZX0mxV4*^_^E6cPA_#XAS0m32%Vs>%S-#QXry>h5AXm|{f- z`%qW-#OG}E<>9^ztvEtl`7|0RZvGL^7hJxK-}PuW#f;DK&NBwc@33N%%*$p$fWU3N zOz~?QySsbaSjsp}tI*&I0`Je5K3mq-4%S~5p_@6{({`d$=G^Pz|3)XB2Xu{-`=!8+;`ya5%q%OgLPw= z>Nx34Rtv*~(@B&+8|gDIzwaG_;QU3O+oyZ~^R)v6Z5zk(Sx=}KKhsBoXA=hqJnPtQR-YiIcM`}YoG;D28eN#Oo0e(4y!Zz|xyF&#HH zbc9YR5?aU7B-O}3Rfe)t3JVvgC&j;DzJ+Y~gnTjO9Lpq2gyI}8S?`DfQvYc)7-WG+ znUvf#lH(m>dgbiw>uy%}Ekj!pBliP)w%s-q@$U;eVXngn(dneu6EktOo_hQU)9qVE z<&s!wF3H0FjiS2NYRV1RKbANSL3M@XTE%M9)h3JQ5)MvCedkbyeQjYs!C2_=7NL6e zD>8M}-{@PL3-AyTm8&sh6_dL5-X~h5EGS`g)7F&?>%BeA+fLo_{%>`B~#Zdn*B6JDNT!|cB2n~H-cB6Hf2qCv=aXQ0HIIyK_Wg6bJoP0RxoAs zWaz($otfp1bM@379$AdOp6&vUmgvQ2YZk|w-FOT}k%G4l0o0+q*3nQi6?|9GGxKTu zm)25aa7vG`+w^W)O!6KmE2Uu|l~MJ?Mce^F(|@Gle%KBT9z1be1vS8+(;&GhNS?Ns0z3z+e)@8w%T#dck>$gC(aW79 z(_j8pz##ns=)=M6(cu>LG;|$ttWq~wnQH z%}TMK7pcSOEWC9A3Yevavs7FbULRI|$uY``b_1tsI7Ij}o|{QI%;rnl3AK&6kiUgE zs1p}cpo(H?z)`M-lSqA<@5g27w_t5!*kBR`T*c4u6+dE=yn*J>dFDi=dTwnk5}q5} z($km-G!Kl@_M@at`4qQZIZ=qoMb6q5wqdtx7#RoT=y1^1I(bkM0x-v%3|@@lMV*+g zcK|Pht9qNXZk`z3Hd%YJ8*yh^MRYbNEd2F7ji_EfHP9w}vt(rGpB8WC^$yQlpdI3V zOj%o^_l9#|uuI?^<@{6EH6zo Date: Tue, 29 Jan 2013 02:29:52 +0200 Subject: [PATCH 10/13] double zeros buttons added --- MSCurrencyFormatter.h | 2 + MSCurrencyFormatter.m | 92 ++++++++++++++++++++++++++++++-------- doubleZerosButtonDown.png | Bin 0 -> 4448 bytes doubleZerosButtonUp.png | Bin 0 -> 4981 bytes 4 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 doubleZerosButtonDown.png create mode 100644 doubleZerosButtonUp.png diff --git a/MSCurrencyFormatter.h b/MSCurrencyFormatter.h index ee32b56..deff5aa 100644 --- a/MSCurrencyFormatter.h +++ b/MSCurrencyFormatter.h @@ -15,6 +15,8 @@ @property (nonatomic, copy) void (^textFieldShouldEndEditingBlock)(UITextField *textField); @property (nonatomic, copy) void (^textFieldDidEndEditingBlock)(UITextField *textField); +- (id)initWithLocale:(NSLocale *)locale withExtraButton:(int)extraButton; +- (id)initWithLocale:(NSLocale *)locale withDoubleZerosButton:(BOOL)doubleZerosButton; - (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton; - (id)initWithLocale:(NSLocale *)locale; - (void)startWatchingForKeyboardFromTextField:(UITextField *)textField; diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index bef7c03..66b09ca 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -13,8 +13,10 @@ @interface MSCurrencyFormatter () @property (nonatomic, strong) NSLocale *locale; @property (nonatomic, strong) NSNumberFormatter *formatter; @property (nonatomic, strong) UIButton *toggleButton; +@property (nonatomic, strong) UIButton *doubleZerosButton; @property (nonatomic, weak) UITextField *assignedTextField; @property (nonatomic, assign) BOOL withToggleButton; +@property (nonatomic, assign) BOOL withDoubleZerosButton; @property (nonatomic, assign) BOOL newButton; @property (nonatomic, assign) BOOL keyboardDidShow; @@ -22,30 +24,63 @@ @interface MSCurrencyFormatter () @implementation MSCurrencyFormatter -- (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton +- (id)initWithLocale:(NSLocale *)locale withExtraButton:(int)extraButton { if (self = [super init]) { [self setLocale:locale]; - [self setWithToggleButton:toggleButton]; + + if (extraButton == 1) { + [self setWithToggleButton:YES]; + } else if (extraButton == 2) { + [self setWithDoubleZerosButton:YES]; + } else { + [self setWithToggleButton:NO]; + [self setWithDoubleZerosButton:NO]; + } + [self setFormatter:[[NSNumberFormatter alloc] init]]; [[self formatter] setNumberStyle:NSNumberFormatterCurrencyStyle]; [[self formatter] setLocale:[self locale]]; - + if ([self withToggleButton] && [[self toggleButton] isEqual:nil]) { - [self setToggleButton:[UIButton buttonWithType:UIButtonTypeCustom]]; + [self setToggleButton:[UIButton buttonWithType:UIButtonTypeCustom]]; [[self toggleButton] setFrame:CGRectMake(0, 163, 105, 53)]; [[self toggleButton] setAdjustsImageWhenHighlighted:NO]; [[self toggleButton] setImage:[UIImage imageNamed:@"toggleButtonUp.png"] forState:UIControlStateNormal]; [[self toggleButton] setImage:[UIImage imageNamed:@"toggleButtonDown.png"] forState:UIControlStateHighlighted]; [[self toggleButton] addTarget:self action:@selector(toggleButton:) forControlEvents:UIControlEventTouchUpInside]; + + } else if ([self withDoubleZerosButton] && [[self doubleZerosButton] isEqual:nil]) { + + [self setDoubleZerosButton:[UIButton buttonWithType:UIButtonTypeCustom]]; + [[self doubleZerosButton] setFrame:CGRectMake(0, 163, 105, 53)]; + [[self doubleZerosButton] setAdjustsImageWhenHighlighted:NO]; + [[self doubleZerosButton] setImage:[UIImage imageNamed:@"doubleZerosButtonUp.png"] forState:UIControlStateNormal]; + [[self doubleZerosButton] setImage:[UIImage imageNamed:@"doubleZerosButtonDown.png"] forState:UIControlStateHighlighted]; + [[self doubleZerosButton] addTarget:self action:@selector(doubleZerosButton:) forControlEvents:UIControlEventTouchUpInside]; + } [self setNewButton:TRUE]; } - + return self; } +- (id)initWithLocale:(NSLocale *)locale withDoubleZerosButton:(BOOL)doubleZerosButton +{ + int toggle = 0; + if (doubleZerosButton) toggle = 2; + return [self initWithLocale:locale withExtraButton:toggle]; +} + +- (id)initWithLocale:(NSLocale *)locale withToggleButton:(BOOL)toggleButton +{ + int toggle = 0; + if (toggleButton) toggle = 1; + return [self initWithLocale:locale withExtraButton:toggle]; +} + - (id)initWithLocale:(NSLocale *)locale { return [self initWithLocale:locale withToggleButton:NO]; @@ -69,7 +104,7 @@ - (void)startWatchingForKeyboardFromTextField:(UITextField *)textField self.assignedTextField.keyboardType = UIKeyboardTypeNumberPad; if (![[[UIDevice currentDevice] model] isEqualToString:@"iPad"]) { - if ([self withToggleButton]) { + if ([self withToggleButton] || [self withDoubleZerosButton]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardStartedEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil]; @@ -79,22 +114,32 @@ - (void)startWatchingForKeyboardFromTextField:(UITextField *)textField - (void)keyboardDidShow:(NSNotification *)note { - self.keyboardDidShow = TRUE; - if ([self.assignedTextField isFirstResponder] && self.newButton) [self addButtonToKeyboard]; + [self setKeyboardDidShow:TRUE]; + if ([[self assignedTextField] isFirstResponder] && [self newButton]) [self addButtonToKeyboard]; } - (void)keyboardStartedEditing:(NSNotification *)note { if ([[self assignedTextField] isFirstResponder]) { - if ([self withToggleButton] && [self newButton] && [self keyboardDidShow]) [self addButtonToKeyboard]; + if (([self withToggleButton] || [self withDoubleZerosButton]) && [self newButton] && [self keyboardDidShow]) [self addButtonToKeyboard]; if ([[[self assignedTextField] text] length] == 0 && [[[self assignedTextField] delegate] isEqual:self]) { [[self assignedTextField] setText:[[self formatter] stringFromNumber:[NSNumber numberWithFloat:0.0]]]; } - [[self toggleButton] setHidden:NO]; - [[self toggleButton] setUserInteractionEnabled:YES]; + if ([self withToggleButton]) { + [[self toggleButton] setHidden:NO]; + [[self toggleButton] setUserInteractionEnabled:YES]; + } else if ([self withDoubleZerosButton]) { + [[self doubleZerosButton] setHidden:NO]; + [[self doubleZerosButton] setUserInteractionEnabled:YES]; + } } else { - [[self toggleButton] setHidden:YES]; - [[self toggleButton] setUserInteractionEnabled:NO]; + if ([self withToggleButton]) { + [[self toggleButton] setHidden:YES]; + [[self toggleButton] setUserInteractionEnabled:NO]; + } else if ([self withDoubleZerosButton]) { + [[self doubleZerosButton] setHidden:YES]; + [[self doubleZerosButton] setUserInteractionEnabled:NO]; + } } } @@ -103,7 +148,7 @@ - (void)keyboardWasDismissed:(NSNotification *)note if ([self doesAlertViewExist]) [self endWatchingForKeyboard]; [self setNewButton:TRUE]; - if ([self withToggleButton]) [self setKeyboardDidShow:FALSE]; + if ([self withToggleButton] || [self withDoubleZerosButton]) [self setKeyboardDidShow:FALSE]; } - (void)endWatchingForKeyboard @@ -120,8 +165,12 @@ - (void)addButtonToKeyboard for (UIView *keyboard in [tempWindow subviews]) { if ([[keyboard description] hasPrefix:@" 0) { + [[self assignedTextField] setText:[[[self assignedTextField] text] stringByAppendingString:@"00"]]; + } +} + - (BOOL)doesAlertViewExist { for (UIWindow* window in [[UIApplication sharedApplication] windows]) { @@ -143,7 +199,7 @@ - (BOOL)doesAlertViewExist return NO; } -#pragma mark UITextField Delegate Methods +#pragma mark UITextFieldDelegate - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { @@ -220,8 +276,6 @@ - (NSString *)formatTextField:(UITextField *)textField withCharactersInRange:(NS return results; } -#pragma mark UITextFieldDelegate - - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; diff --git a/doubleZerosButtonDown.png b/doubleZerosButtonDown.png new file mode 100644 index 0000000000000000000000000000000000000000..94fe159954dff21c08dda1aa783b669ed9669b68 GIT binary patch literal 4448 zcmX|Fc{r5q_ve+Jq%2uyvV<^$2+5i?N(x!#HHwfmBum4jv1A=2DluM?$R62e>_f`X zV#zZ0-HdIR!OVO|{jT31&;4B2{oLoA&*yCSxt@fZH_UjsM7fxln0PJBjc+mD-x-fL z2ODGUW8!mSV&a#xFgCOe`@IgK1PhGtN5O4MA$nB_)z_mFIL&zei6O9XKH@$n69^Cz z@_Y&u;O98sBU8=ty#M6cj8V3?g{Kj@LGu3NT5NX`J1MN&IxlU->cEdd^&~kY4UIdzU zg^PJ;YEqG4i!@`^mx`AlyWAq^bvN?TcENb|rAyQGZU z4ILx}#vGiY-Kr|=08jZbwtv-38yWm}@K83(S6552rua=I5w3Q`O8wE|MWR=om+6a^ zH98ePSM9$XAc|AaTSWPz(R9L5cv_I=h104N+?~eU@Ijdra&hWkK?T*W&Jiw_x41~m z6Wx+y>sD9pW_&1dvjcWs9$k_|QXOmj-;UHx{jvVu#V}DK9q20a(CS_s8lJzj*t1o5 z=*UhopsgJ9=7Im0-dlHb2O&ZwGp)@0}Nu_u-hj-7oNHC*5ysrs~+(L8Iav20PF zX=P>!%>Wrjj22NK2GG7u;Y7sq6CMU|*v(OW7;jsJ=qe`9BOdcBrH^SVU;o2MCcNoy8Zb!} zCbIe|Ia-7C{M`@!#$vj|FX2oUdxpWKjA4o?9R# zwM*`8Wo)v9eh?zd{%7xfMf?8Ft7h{voo1%P3F=A(Ae!CcNXE-FG(aDp1vC&tyx0*6&y& zS&cB2-*a=NC0pF~82VG9ZsFx4s-G91e-yil{yd6i`4!O_1|=e$!?%+-Bvuxjey zz^7ca7kPweH3?p#&~!G1g%X&yuo{vqSZtu2H7ci-89xCx(1Ve0{x0jkQ_=f<`^~zF z9ge78;dz7dPib^qM*OJn5Zd*FLLL!wA7*$hk~uu}S zKrY>(2_)L_J}Y*+oAY+cYR6unwLZC*3$6S|8%)kO%1`}#egBW70?%W%=!y2~ zhp=_jDHV9rST+bM+g?LaMdn>|3K_oixDRkc@gMzLPQ2>fMa3CJj0kOhY&=XGG6r@_;Di?2QmCb$=*S*`rBwmo3H`N01$|t}M!Mi;y z3tLppY49>C{CZ5;nZD5!_aFP%=RML7767sXbtXrCluX;7mcJr)m(wAmlOJb|tk07R z1@T=rAQM^A_OLR^(}da__1}EWMK?3+9>=1cNIEY$siBR>*w&;)E=~Kg-dSHT3@!iJ zck-OwT7a+~qWZz0ZBpF3h8oo@%kU6H5S@C+SK9y!K1@}+;b?~-VwmBE3A2}K%CQnw zN~vK2kgE>hWQm>lfNjI zXM*>!ZCf4U9PZKyR8{&aYwqS`)5}UfL-AVw*^tN_w?=X82uS1p1_E0bK{54M7EIbE z)5PY5OH;(J07iRglZiSAC=AKaBLX?7^T*EK7%feH^K6^d;g8lS2-^66d_H2B^P! zXomSnp^0q@&pZ4u$mdmZ{E@vj0*M#5Tuto4bh$~W|FcnF%J9b3TXi>D zo_vqt7Jc3VvEMIc-~95+$Fx-j{>$l;|0g0mMqgYed6iX(vo>2so`;#=#xOn3$XB=9!qJ+7hEXNFhAe=Q$*&EzRc&$ z?1|6(3KyXoDA~1iEqU|?P$ZC95uANJER9Kc&TyMLGKWJ5D4#&=Pg8x9l;8Tw%ot81 zF0xk8yPgye{@-EcarPmg$nI&r?^%8bH2uvHtAanmjffoT%Lp+!x{;wu^Cxd8?E1xo zhBPk2ETzEND4ul__`mz>ZMt!l%+d`9LP+L)C-`i-p0QqnQ^{-n%a?5ETXrhzSPK)_*}%dYz1 zz~p$niOAaTID{7eA6?^0?RBjC2 zeus~&ZSbA^d|PC#6RDT_QIMv5`+*(89<1n{V|P~`d0c_%x<8xlo@f$OUAL~bcm~^} zbgF6#Z)#2>hciV4ovxhZld$X24p~GvfJOo)YzhDVXm&~J|2@T9s*;J_#{)4p{pP11 zPoKRT`RHgX>MQ*qgmk^7Dp;YcyrIT1PdC&>#PhHX=hpc4GBw&;kt+Pf3Btw}T6lMl zs`*?l2>htZee$Wf8L)6VOa+jNTyt{{qIu%z7Nz#|Hdl|EZ!#h0ujeWgr&>QI|Cp#& z`}|q=FskJDwX4^x8EsCaJH+di!XFlfsS7(CW4w%V7TWW=dsYA;yEX_|U_T^Lh-3ST zjDmqQ$Yaqe3R#vmD=bSRY z>)vA;?y_i-d>5!YoKlp-tt^_Uibny9h3!(-b8ipH$X$P(+uF`2DSAuaW`NEb)EK$s zOm>IOt}I=&e!u;dq9CtG(RN$`ecZ!U%aoE0*)31(u^#@XUxP4p=<$@N z(gRnxU}8s4tgqw<^IrEmT^=G9Y5+1zMa5VbCFs9;Q_0qpnrAA2-^Zt6R4i=m`;TXt ztk~+j7Kyfld@G;a9vt6AkacqH({DRUlT*VmSp*(N7Iy(Y!zX&><%AG#F@JW?p5SzedyBkeH;G!`3%=&_dm}-mivgKJ+ zq}!gG&LXaHAdengp!pD&sOJW1-j__{1SKvV2J}JYPcuI?ipESDs*Pq@!G=kVbkYm! zGa?03yyNAK;$%{qm8;ELt1Ec8Go!iGBR=h8z1;em>M%M5kW_IUi%wU{+(dTGlW^3< z>~fvGUUok8Cxz&}p(s3Dlh%l^y)}6}_ur8pGrvs!^hkyfmG%m*lpXi^{#YepVx;A@ zKIReYM2kISx#TpgCq{^p4sZLlk59*#uTML$v&T{kDJlB%c2hDyYhs;$YpI${1$3q5aWBj4V9eS*x#$Pim#-)gqSm3clJf z-?K#xT>ytkOTXzoDK1@xjMJY&Qi@}fxX|>^M<#?=p{%kTNnmRHMj?}fwNt}~=|ejH z@z?3%5+KLikLDg0ZxvNhP=;5s++4S-tvcHU0r~O|u3h(-DfCLDughn=&u1L+v(r6 z-CxB4kreZ2NgE@a^|+g{drJrI^oY4X1`?FF_({t#ra*6LzrAA#NmZoW&of0_9epRz z|9M6Fq~)qJHbH=tTjLs9O<&uz45}4I1aPHC8FQo9>ms*$Xny4TXpg0;O+nXpc~bcG z0&R@q)F_4*vkupsj*p_JwX&G4yr4h!^1kw>F>5q)^8<`*-6nI*=3p^U{q< zk9e>a92MVE4Ht`QKZi)Vh+d}Ee@ZBiba=yuDFPUi|J^w@!y2#Zu5GUERdQMY|J+0T{#`vC3aXpBmB)|bZME`=Tx#^cOU zt%ga?o~1Oi&mANCj*rmm6$x0!$3ZvUyhqQ+oNN&Y`f{Xpas?zri7{&@KG)m}=may# zUSNyI&AtDw^u@q+>n~KxQx*8CO<^bfFl-<|6KIk082#1uT5lG2W0{MO9E6;z zaMZ{jf2{DDnJ`PS`P<`YQZ?2CXBwwXkfWIPmYN|Q<3WgA)h0cpbvorxCA+K@-?W|I zI@8zHap!4TL@BIwabdql>`-$$+Y{`fV7P0f??6_jEc@vqpWy`=z@I|12)bUdv+W(l zEThnQqi%95!_B;86XR089G0L>k6PWc_s4ggXJfq>piW0swopRXQ9C>FyJ7e3R6jU* z2w&ty1q+Y_DWI?|ojrK#(ZRWp%ekxHBCMHDS{l6V)d*OJ;-LEP-Z|G3ZF8FS-=D7E zgEKUSpNX2f(Si!mg}2;Xhu-1iQ&^#GcdiE0wPc+?il0DBp}NW!w{SWiUDl!Paq&OH zti*K8&Zle$Gjqf5^09hS88DYh?&!%JT@3Jx)S-u5`@B-Gp@yp`!g;u%HaJ%B9FmF~ zf-heELTBFcTCgAyZbR8mIzlodBO`UeEqBTRhjOINwC7m_&>d?OrpyJiVGn3#w+ki8 qiMU74P7jl)JKIq=_A4vloPs4@7aTWkc{2W-Fj<(~Fs?9iefB?Ki4`UQ literal 0 HcmV?d00001 diff --git a/doubleZerosButtonUp.png b/doubleZerosButtonUp.png new file mode 100644 index 0000000000000000000000000000000000000000..2b7b6ea75e5a7f11858f0771736e904d98dbb1a2 GIT binary patch literal 4981 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 literal 0 HcmV?d00001 From 413df4009926dcfb9b02e95ffcd6bb2ad67eab69 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Tue, 29 Jan 2013 02:31:12 +0200 Subject: [PATCH 11/13] 0.0.4pre --- MSCurrencyFormatter.podspec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MSCurrencyFormatter.podspec b/MSCurrencyFormatter.podspec index 8d44e94..d62f473 100644 --- a/MSCurrencyFormatter.podspec +++ b/MSCurrencyFormatter.podspec @@ -1,13 +1,13 @@ Pod::Spec.new do |s| s.name = "MSCurrencyFormatter" - s.version = "0.0.3" + s.version = "0.0.4" s.summary = "A piece of code that will automatically format a UITextField with a numberpad to behave like an ATM." s.homepage = "https://github.com/unteleported/MSCurrencyFormatter" s.license = 'MIT' s.authors = { "Brandon Butler" => "", "Olexandr Skrypnyk" => "sxua@unteleported.com" } - s.source = { :git => "https://github.com/unteleported/MSCurrencyFormatter.git", :tag => "0.0.3" } + s.source = { :git => "https://github.com/unteleported/MSCurrencyFormatter.git", :tag => "0.0.4" } s.platform = :ios, '5.0' s.source_files = 'MSCurrencyFormatter.{h,m}' - s.resources = "toggleButton{Down,Up}.png" + s.resources = "{toggle,doubleZeros}Button{Down,Up}.png" s.requires_arc = true end From 1de9e48d0e9ec3d0570c2063a730f84d73fab296 Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Tue, 29 Jan 2013 03:00:39 +0200 Subject: [PATCH 12/13] update button images --- doubleZerosButtonDown.png | Bin 4448 -> 4349 bytes doubleZerosButtonUp.png | Bin 4981 -> 6062 bytes toggleButtonDown.png | Bin 2732 -> 2701 bytes toggleButtonUp.png | Bin 2672 -> 3890 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doubleZerosButtonDown.png b/doubleZerosButtonDown.png index 94fe159954dff21c08dda1aa783b669ed9669b68..8f478f8285c8568a91ed85c26af6d53fd4db7ce1 100644 GIT binary patch delta 870 zcmV-s1DX8bBK;wdBLWb_u_cBLfA-0xx9K1T;{G0>UMg|mhTs54kl?}_`s8&8Eon=? z|21e8Z6+(l8g=jzVfiq!^Ixy+-;N^gW2ZlES6%Hxk6XETJ}$=9dLSaF^=!UVKZ^6E zW7$<-{)_yE#-tIEwisf-Lqghp&Yy+FSNSjU+dBE}=oXO)wd6jnXXnHSf1y9;&%wg? zFaJe;yUU=H?>+YXw#OmIIU?yFeNH6wPs#%C%KyLNx0a|6gKvV!Jfdm)aQ$&+U21>Mf1i-I{Ey)`T#_Gd+Cv|Gz23xij!5f~JM$pIpPIM)kKs35 z#**VA&Z3YDif>%#Ej$dFNA3&!d3ekJ7=BY8BEDV|?|-$4YxP{+FCTCDAH!qAA%;0Z z4HIe!2-nnk0)Hyr@;`>(K7YA#8@00@1)+ztNS{sad;6fr*iX1mfA|ygmj5yQ#tJxC zK>dF;KNoNLA2PrFk(Ta7oGl%pX2_lMQM~@s`EnE2IifUQ-w#U0TmHxJ8-5JS4iE}B zMr}IX@4TVpM>@l8LwckKs3^p{`$u$p2~o;$7Bz zOpvufAJ2BG74*o3e_Gbht>@>6Z~4#p^*<692iN;ee2AWt`$U;|%l{aD zYsoxaA|l^wzv8X;m?68%q90B#Hxao2Li!2yvIPEAyybrkzqLdI(S>=4$enu34&6uK zPsLmQ$MD;e{%PH6tCy!h=e~aZ}}g? zZ}OtL!X9RX?=?byp*{<5`5(h?GB}ndAeoepxBQRbCx4`O$3J@SvQS8vXpi@`!~GLP1?^SFKT^EQ?L0sQvl*^B7G6OBMb9=tE-&&FH+2k_hdgG2Y? z+oMH~Lq55FSmOKzB66W$Cf-H)AHZW~wtDdJQ7?vYQ3Z$MA8Mcb=HbQf@?YbmABLWd8u_cBLe|F5^r>P(a6_V^`R!zbQ8|wck1ndL^dZ}ZuZWj}aitot z@M%8nU*?zMeC}9g<;VV&{DQ)y5Rq;$Sc8j%bmuw07nXL#{+0YvJAYbqe*w#cTymb~ zvp89VqCV&M!NTW{{VVxpo<@U1*rXK8w&^1dOX^$4i4^snvS4?y|LgEeawSDo%{%!bWzGmmJ@D*UBo+97uqB*}S-q^nlzwCcMud>pIY-g#NQ!2$^8@^3G zdXsq+Qt*4>js4s3%k+mce^~g6p=dpRk$P$CbAE@sv40zW!6Ac-Grs8lx3h_@eOQ_g zzoj2U_+9hH{%!aLhcRS1NI7V!5)|KvNI!BhtRFeA;CI9u`?uj2%|+Pf>%{AyPHe60 zYv=RF8~eB6k*Oe>wFo&($R!{OS@u)#yW)-g+wjZY*VEQQDVD85f2h$iNbb$gm-FCk zQBQH6@H^&>{oC*hOWW6mrV^G7jl37Wsrn!S9GS_HV;403|90htK1t(k#kAVDZEo z`?uj2OAxN#u<#dJe?NG~aUVAzNsV^C%v4IqmJ7M8UTZ#&!;*_)=izgH*SxWR8-D2x zM@0c525wf*{vxtZ&J(%dMUU9O!Mw83J4Dc2C$RAUb-mz?`!JWRz2Ca>puOSA#KKpA zkb0_oz2@cj#vA)L;Fo7FUMWHJLO)peE&1qeJ&%Il6>sd{e}G?>?mcLH7{S7)1K3~W zLdE#K^Tz%S_(epj51RvW@Mg3<7-ie^TjGUiK99o^ey_awckG|@^M~|!WmPe#T4onB z4WDxq^%eOpc=0>-f4%(rA$2;P>dksj0S-$*oX9nA>|f7cKcu8vx9?P&yFaE9xAuQ! z+w^%8e%?;Jf1h z&(VM8L(2aF@o42q_3l$&2M$?Wlzn}DJukdhtsna*JoWI9h?edyS5Ke6tX{wERv)_u sRd??v8DxRt;MVp1^YVU9_ph&i2^FbmDp~DPX8-^I07*qoM6N<$g0Qm(Q2+n{ diff --git a/doubleZerosButtonUp.png b/doubleZerosButtonUp.png index 2b7b6ea75e5a7f11858f0771736e904d98dbb1a2..4754642a558dc0e79d729c3a61fa2b1ed5b6f77d 100644 GIT binary patch literal 6062 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 R@8KoR*jzYS`WN!v{{Yy!3orlx literal 4981 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 diff --git a/toggleButtonDown.png b/toggleButtonDown.png index 16fd808f62c041461afe8bd1124e2d6d509b70fa..e753265eb291e686b306611ec383687863e8794b 100644 GIT binary patch literal 2701 zcmXX|dpwi-A9pH;$feU9zjWvvj?h|uD)+`ADw|^%4U@~TVQ$;Zn9FiY98O^@5goUs z+%GB2T%w~3wMkK8l5&ff+h+57rr+~=KhN{W_xXOG&-?xPe%_yNx}(Dd1vxc2DJdxh zyNfo?z?%cy!LoaSr})E8pp?`P7)N^-+uWO_xdo*;jMDI^ zHkcp^+}YFC4v7hh3JM|Z?CgA*o%0PO=hAO>_x|e}7ucS4h5QoXT}-dJK+&l7Jf$psx)Si*!mqKVNdUIC;)Jn^zW!7G61 z;(;qDuDt9|ggbf=D9N6F5uSboqA60nt#gfSi;Xh+&p!bT-)6O!QB)p5+NG-*mhDFQntl|& znlzi*#D2aj7^Aow-;uJAJiK82JFl|2`>}o-Aos6bZ44$6>0jHKKdJcbAzE zUP-nKz-NIsPis>RaH^eG)>hJtZ*)@s`|XeHmWC4nB2m`bzLL2AnwlCE3<^G{RyVQz zbDfa6NTgC_kL$I9(hUufMA*)?KdM&2+Uq|_R=`bEmK|eSxel{#ApS(?-O~B_xJS}% zIFQ4MG91fQEPnvmty(WhR$0LXD_D8+j2f1p)UZp#=vhfm9v^%3#o*xcL0xQKe--hEzqx8_G)DSO1lb~4 z-$x`0wa8y3trn!{VQQsq8HdE!b+Ej=_o6>Al0YCN72q2_3Xh4E0ubIXUFN;Q(;#%)@z8RoyagFOeCaZOzQOfai(p9%b zVx@a?X?kd6m^i2AgbW12^{QmLT{=vaJAqM0Y&Lt{7#p2o4iB717}LD;g2^#ta)4p& zZ!e=qpbI>1Th7?qmKi3!v4xpz*-=w_Ts|NQ7LUE=ZdO-rG;={fPk4Wuyo|$!g7Nq9 za#@>osUKF<9%+mkF6*J~LKhHxJyCOR7R79{_nil|qP&dO+4-Q>4Zq)F9GL%LORswm zJVBf@%Z!0k48wW^g5#(N^`yGh)H|?@(Odk}@i5Dww_iR^DuqMq;3(q}V^9OT;pY{P z<+TEqGl_;Q;pqDuLdekm;|DEr&OwqCVyo0~um8dBFo4MN8ip;zIiVq;HQ{|k@Jt4z z;)Nj*TK+YDv(1})*Dj$Fp;s^8(sSEOyqsSP=73ic*j|@E*EKhcZ_|6mtRax#(SefU z#m7V(UME}4HvpIHas8yu*$^?zoIS$i7uH`uh5YU*3dK<Dbbasv zD3);E@@vI`n5UPVUs!}Cz_xDdUZ7r?HT6Pk={B zDs25#u1F`tBq#EvU$M8sMDDl{?J8n{=RXa-S9G@FWY5S5Wn>VFU+z0b^r+SkigWs$ z;Do#m5iA}5rI%3;D1E-~W=9262BG4vv2WLmZgP5)&)IrH<8Do792lxik<`EM3ARJG ztHJfAyVSHpyI#|J4&*c_j(_a+1Msh6=wF{+@v^6umq&R`ziK;IUoSS`YMJwPi<8@S z^CT*=)z{&>Hx|P5G9BHJ{AX3bFpb7t+ImImJ6QUpI_)h4D9@T#fxj634VtaGov$`@ zB*P3>dsenqVs5RUo0Xx2(Y&7w;||X+g=eW+WvO~Ht+QvoJx;QSJ1DVl1G5A|+GyIeBK!$0yQ=SVTci!I{ZgzYC}b8E;tJJcC7zi%`_dj`>kP|k8=92RHoso8`eM~4 zI3;iObTHKAs>XL#&JvH@OnlxzCnIiG|iZPY! zNh=tLM}KJawW~{2lE7%KgF z{+ZzT9DMWC2)6`fJ?XB`wr)*R%L5izP;)IcW`u)``DcNiT^+hMw*t$~oXy64ZvczO ztxmBXQOjhj`o}4|6u3)^uhG)rYv5S9&djxqRtjB~)lOx~GF?6wh4Unx7>+s!t36nU z=2*o10HjQ>X7LKWNi?8Cdftu0($+Hii{Wlr@GQRLl3o`7m; qN;_LiJDez517id3E<+RS$XpND`;Z3D*bf|nr0i@RY-+82lKuxFHhcyE literal 2732 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 diff --git a/toggleButtonUp.png b/toggleButtonUp.png index 28bcc635c4ead22be48e1ec472e3189bea1eb5fb..47b9c78c4f2ee2a25d7089594b58284319f2c272 100644 GIT binary patch delta 3303 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 l!YVu1H0O%Z$SV6002ovPDHLkV1oVA{wn|g delta 2075 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 FV1jfvF@*pC From d52a2041c756c1f4115630a5ed39faa105cfd9bf Mon Sep 17 00:00:00 2001 From: Olexandr Skrypnyk Date: Tue, 29 Jan 2013 03:00:59 +0200 Subject: [PATCH 13/13] update double zero button logic --- MSCurrencyFormatter.m | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MSCurrencyFormatter.m b/MSCurrencyFormatter.m index 66b09ca..574052d 100644 --- a/MSCurrencyFormatter.m +++ b/MSCurrencyFormatter.m @@ -41,9 +41,8 @@ - (id)initWithLocale:(NSLocale *)locale withExtraButton:(int)extraButton [self setFormatter:[[NSNumberFormatter alloc] init]]; [[self formatter] setNumberStyle:NSNumberFormatterCurrencyStyle]; [[self formatter] setLocale:[self locale]]; - - if ([self withToggleButton] && [[self toggleButton] isEqual:nil]) { + if ([self withToggleButton] && ![self toggleButton]) { [self setToggleButton:[UIButton buttonWithType:UIButtonTypeCustom]]; [[self toggleButton] setFrame:CGRectMake(0, 163, 105, 53)]; [[self toggleButton] setAdjustsImageWhenHighlighted:NO]; @@ -51,8 +50,7 @@ - (id)initWithLocale:(NSLocale *)locale withExtraButton:(int)extraButton [[self toggleButton] setImage:[UIImage imageNamed:@"toggleButtonDown.png"] forState:UIControlStateHighlighted]; [[self toggleButton] addTarget:self action:@selector(toggleButton:) forControlEvents:UIControlEventTouchUpInside]; - } else if ([self withDoubleZerosButton] && [[self doubleZerosButton] isEqual:nil]) { - + } else if ([self withDoubleZerosButton] && ![self doubleZerosButton]) { [self setDoubleZerosButton:[UIButton buttonWithType:UIButtonTypeCustom]]; [[self doubleZerosButton] setFrame:CGRectMake(0, 163, 105, 53)]; [[self doubleZerosButton] setAdjustsImageWhenHighlighted:NO]; @@ -185,7 +183,9 @@ - (void)toggleButton:(id)sender - (void)doubleZerosButton:(id)sender { if ([[[self assignedTextField] text] length] > 0) { - [[self assignedTextField] setText:[[[self assignedTextField] text] stringByAppendingString:@"00"]]; + for (int i = 0; i < 2; i++) { + [[[self assignedTextField] delegate] textField:[self assignedTextField] shouldChangeCharactersInRange:NSMakeRange(-1, 1) replacementString:@"0"]; + } } }