Skip to content

Commit 106f04b

Browse files
authored
Merge pull request #10 from NextFaze/master
Add support for country code independent of locale
2 parents 5242baf + 3e09b18 commit 106f04b

File tree

5 files changed

+21
-15
lines changed

5 files changed

+21
-15
lines changed

Classes/MPFormatterUtils.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@
3333

3434
@interface MPFormatterUtils : NSObject
3535

36-
+ (NSNumberFormatter *)currencyFormatter:(NSLocale *)locale;
36+
+ (NSNumberFormatter *)currencyFormatter:(NSLocale *)locale currencyCode:(NSString *)code;
3737
+ (NSString *)stringFromPercentage:(NSNumber *)number locale:(NSLocale *)locale;
3838
+ (NSString *)shortStringFromPercentage:(NSNumber *)number locale:(NSLocale *)locale;
39-
+ (NSString *)stringFromCurrency:(NSNumber *)currency locale:(NSLocale *)locale;
39+
+ (NSString *)stringFromCurrency:(NSNumber *)currency locale:(NSLocale *)locale currencyCode:(NSString *)code;
4040
+ (NSString *)stringFromNumber:(NSNumber *)currency locale:(NSLocale *)locale;
4141
+ (NSString *)stringFromInteger:(NSNumber *)integer locale:(NSLocale *)locale;
4242
+ (NSNumber *)numberFromString:(NSString *)string locale:(NSLocale *)locale;
43-
+ (NSNumber *)currencyFromString:(NSString *)string locale:(NSLocale *)locale;
43+
+ (NSNumber *)currencyFromString:(NSString *)string locale:(NSLocale *)locale currencyCode:(NSString *)code;
4444
+ (NSNumber *)percentageFromString:(NSString *)string locale:(NSLocale *)locale;
4545
+ (NSNumber *)integerFromString:(NSString *)string locale:(NSLocale *)locale;
4646

Classes/MPFormatterUtils.m

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@
3333

3434
@implementation MPFormatterUtils
3535

36-
+ (NSNumberFormatter *)currencyFormatter:(NSLocale *)locale
36+
+ (NSNumberFormatter *)currencyFormatter:(NSLocale *)locale currencyCode:(NSString *)code
3737
{
3838
static NSNumberFormatter *currencyFormatter;
39-
if (!currencyFormatter || currencyFormatter.locale != locale) {
39+
if (!currencyFormatter || currencyFormatter.locale != locale || (code != nil && currencyFormatter.currencyCode != code)) {
4040
currencyFormatter = [[NSNumberFormatter alloc] init];
4141
[currencyFormatter setLocale:locale];
42+
if (code) {
43+
[currencyFormatter setCurrencyCode:code];
44+
}
4245
[currencyFormatter setFormatterBehavior:NSNumberFormatterBehaviorDefault];
4346
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
4447

@@ -101,10 +104,10 @@ + (NSString *)shortStringFromPercentage:(NSNumber *)number locale:(NSLocale *)lo
101104
return formatted;
102105
}
103106

104-
+ (NSString *)stringFromCurrency:(NSNumber *)currency locale:(NSLocale *)locale
107+
+ (NSString *)stringFromCurrency:(NSNumber *)currency locale:(NSLocale *)locale currencyCode:(NSString *)code
105108
{
106109
// get formatted string
107-
NSString* formatted = [[self currencyFormatter:locale] stringFromNumber:currency];
110+
NSString* formatted = [[self currencyFormatter:locale currencyCode:code] stringFromNumber:currency];
108111
return formatted;
109112
}
110113

@@ -164,9 +167,9 @@ + (NSNumber *)integerFromString:(NSString *)string locale:(NSLocale *)locale
164167
return [NSNumber numberWithInt:tempNum.intValue];
165168
}
166169

167-
+ (NSNumber *)currencyFromString:(NSString *)string locale:(NSLocale *)locale
170+
+ (NSNumber *)currencyFromString:(NSString *)string locale:(NSLocale *)locale currencyCode:(NSString *)code
168171
{
169-
NSNumberFormatter *currencyFormatter = [self currencyFormatter:locale];
172+
NSNumberFormatter *currencyFormatter = [self currencyFormatter:locale currencyCode:code];
170173
return [currencyFormatter numberFromString:string];
171174
}
172175

Classes/MPNumericTextField.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ IB_DESIGNABLE
4747
@property (nonatomic, strong) IBInspectable UIColor *placeholderColor;
4848
@property (nonatomic, assign) MPNumericTextFieldType type;
4949
@property (nonatomic, strong) NSLocale *locale;
50+
@property (nonatomic, strong) NSString *currencyCode;
5051
@property (nonatomic, assign) NSNumber *numericValue;
5152
@property (nonatomic, readonly) id<UITextFieldDelegate> forwardDelegate;
5253

Classes/MPNumericTextField.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ - (id)init {
6464

6565
- (void) setDefaults {
6666
self.locale = [NSLocale currentLocale];
67+
self.currencyCode = [self.locale objectForKey:NSLocaleCurrencyCode];
6768
self.keyboardType = UIKeyboardTypeDecimalPad;
6869
self.type = MPNumericTextFieldDecimal;
6970
self.delegate = self.numericDelegate;
@@ -80,7 +81,7 @@ - (void) setType:(MPNumericTextFieldType)type {
8081
break;
8182

8283
case MPNumericTextFieldCurrency:
83-
self.placeholder = [MPFormatterUtils stringFromCurrency:@(0) locale:self.locale];
84+
self.placeholder = [MPFormatterUtils stringFromCurrency:@(0) locale:self.locale currencyCode:self.currencyCode];
8485
self.keyboardType = UIKeyboardTypeDecimalPad;
8586
break;
8687

@@ -130,7 +131,7 @@ - (MPNumericTextFieldDelegate *) numericDelegate {
130131
- (void) setNumericValue:(NSNumber *)value {
131132
switch (_type) {
132133
case MPNumericTextFieldCurrency:
133-
self.encodedValue = [MPFormatterUtils stringFromCurrency:value locale:_locale];
134+
self.encodedValue = [MPFormatterUtils stringFromCurrency:value locale:_locale currencyCode:_currencyCode];
134135
break;
135136
case MPNumericTextFieldDecimal:
136137
self.encodedValue = [MPFormatterUtils stringFromNumber:value locale:_locale];
@@ -149,7 +150,7 @@ - (void) setNumericValue:(NSNumber *)value {
149150
- (NSNumber *)numericValue {
150151
switch (_type) {
151152
case MPNumericTextFieldCurrency:
152-
return [MPFormatterUtils currencyFromString:_encodedValue locale:_locale];
153+
return [MPFormatterUtils currencyFromString:_encodedValue locale:_locale currencyCode:_currencyCode];
153154
case MPNumericTextFieldDecimal:
154155
return [MPFormatterUtils numberFromString:_encodedValue locale:_locale];
155156
case MPNumericTextFieldPercentage:

Classes/MPNumericTextFieldDelegate.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRang
118118

119119
MPNumericTextField *fxText = (MPNumericTextField *)textField;
120120
NSLocale *locale = fxText.locale;
121-
NSNumberFormatter *currencyFormatter = [MPFormatterUtils currencyFormatter:locale];
121+
NSString *currencyCode = fxText.currencyCode;
122+
NSNumberFormatter *currencyFormatter = [MPFormatterUtils currencyFormatter:locale currencyCode:currencyCode];
122123

123124
NSMutableCharacterSet *numberSet = [[NSCharacterSet decimalDigitCharacterSet] mutableCopy];
124125
[numberSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
@@ -142,7 +143,7 @@ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRang
142143

143144
switch (fxText.type) {
144145
case MPNumericTextFieldCurrency:
145-
n = [MPFormatterUtils currencyFromString:fxText.encodedValue locale:locale];
146+
n = [MPFormatterUtils currencyFromString:fxText.encodedValue locale:locale currencyCode:currencyCode];
146147
mul = pow(10, [currencyFormatter maximumFractionDigits] + 1);
147148
n = @(round(([n doubleValue] * mul))/10);
148149
break;
@@ -195,7 +196,7 @@ - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRang
195196
switch (fxText.type) {
196197
case MPNumericTextFieldCurrency:
197198
number = @(number.doubleValue / rate);
198-
fxText.encodedValue = [MPFormatterUtils stringFromCurrency:number locale:locale];
199+
fxText.encodedValue = [MPFormatterUtils stringFromCurrency:number locale:locale currencyCode:currencyCode];
199200
break;
200201
case MPNumericTextFieldDecimal:
201202
number = @(number.doubleValue / rate);

0 commit comments

Comments
 (0)