[iOS]入力制限(2) | Cocoa練習帳

[iOS]入力制限(2)

前回紹介した方法だと上手くいかない事が分かったので、紹介する。


フォーマッタを通した後だと、装飾的な文字が追加されるし、元の文字列と、置換される文字列を個別に評価するのは面倒なので、くっつけた後、評価するようにした。以下は、n桁の数値のみの場合。




- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSMutableString *text = [textField.text mutableCopy];
    [text replaceCharactersInRange:range withString:string];
    
    /* クリア(空文字) */
    if (0 == text.length) {
        return YES;
    }
    
    /* n桁 */
    if (n < text.length) {
        return NO;
    }
    
    /* 数字 */
    NSCharacterSet  *digitCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    NSScanner   *scanner = [NSScanner localizedScannerWithString:text];
    [scanner setCharactersToBeSkipped:nil];
    [scanner scanCharactersFromSet:digitCharSet intoString:NULL];
    if (![scanner isAtEnd]) {
        return NO;
    }
    
    return YES;
}



これを金額に変換するメソッドは、以下のとおり。




- (NSString *)stringFromDecimalNumber:(NSDecimalNumber *)decimalNumber
{
    NSNumberFormatter   *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [numberFormatter setCurrencyCode:@"JPY"];
    NSString    *s = [numberFormatter stringFromNumber:decimalNumber];
    return s;
}



【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)