iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
たとえば、テキスト・フィールドの場合。
OSXでは、InterfaceBuilderでテキストフィールドのフォーマッタを設定して、ユーザが入力できる値の形式を指定できる。
iOSでもNSFormatterは存在しているが、ビューの仕組みが違う為か、InterfaceBuilderで入力できる値の形式を指定できない。
そこで、NSFormatterを利用するが、別の方法で入力値の制限方法を試してみることにする。
どので入力値の制限を行うかは、テキストフィールドの場合、UITextFieldのデリゲートUITextFieldDelegateで用意されているメソッドによる事になる。
入力制限は、入力中に行われるのが親切だと思うので、– textField:shouldChangeCharactersInRange:replacementString:で対応することにする。
NSFormatterの使い方を試してみる。
小終点以下1〜2桁までを表示する。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMinimumFractionDigits:1];
[numberFormatter setMaximumFractionDigits:2];
NSNumber *n = [NSNumber numberWithDouble:123456.123456];
NSString *s = [numberFormatter stringFromNumber:n];
NSLog(@"%@", s);
お金として扱い、頭に¥をつける。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setCurrencyCode:@"JPY"];
NSNumber *n = [NSNumber numberWithInt:123456.123456];
NSString *s = [numberFormatter stringFromNumber:n];
NSLog(@"%@", s);
今度は、末尾に円をつける。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setPositiveFormat:@"#,##0円"];
NSNumber *n = [NSNumber numberWithInt:123456.123456];
NSString *s = [numberFormatter stringFromNumber:n];
NSLog(@"%@", s);
三桁毎にカンマ。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setGroupingSeparator:@","];
[numberFormatter setGroupingSize:3];
NSNumber *n = [NSNumber numberWithInt:123456.123456];
NSString *s = [numberFormatter stringFromNumber:n];
NSLog(@"%@", s);
今の時刻を24時間表記で分まで表示。
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterNoStyle];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];
NSString *s = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", s);
頭に年月日を加える。
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];
NSString *s = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", s);
10桁の数字のみを受け付ける例を作ってみる。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSInteger i = [string integerValue];
NSNumber *n = [[NSNumber alloc] initWithInteger:i];
NSString *s = [numberFormatter stringFromNumber:n];
if ([string compare:s] == NSOrderedSame) {
return YES;
}
return NO;
}
もっと、いい方法がありそうだが。。。