2

UITextField番号を銀行番号に自動フォーマットできるを書きたいです。

例:入力1234567890098765は自動的にとして表示され1234 5678 9009 8765ます。

使ってみますtextFieldDelegateが、使い方がわかりませんNSNumberFormatter

どうすればいいですか?

4

3 に答える 3

9

使い方NSNumberFormatterは簡単です。

NSNumber *number = [NSNumber numberWithLongLong:1234567890098765];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSize:3];
// [formatter setGroupingSeparator:@"\u00a0"];
NSString *string = [formatter stringFromNumber:number];

,ユーザーのロケール(たとえば、米国、.ドイツ'、スイス)によって提供されるデフォルトの区切り文字を使用する方がよい場合があるため、フォーマッターのグループ化区切り記号を設定する行に意図的にコメントしました。また、iOSはスペースを区切り文字として使用せず、改行しないスペース(U+00A0)を使用することに注意してください。

于 2013-01-16T15:19:32.683 に答える
0

私はc++ソリューションを持っています、多分あなたはあなたの文字列をcstringに変えてそしてそれから元に戻すことができます

char s[50]={'\0'},ch[99]={'\0'};
int i,j,k,len;
printf("input a string:\n");
scanf("%s",s);
len=strlen(s);
k=0;
for(i=0;i<len;i+=4)
{
    for(j=0;j<4;j++)
    {
        *(ch+k)=*(s+i+j);
        k++;

    }
        *(ch+k)=' ';
        k++;
}
printf("%s\n",ch);
于 2013-01-16T14:53:02.443 に答える
0

これを試して :-

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

   NSString *text = [textField text];

    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
        return NO;
    }

    text = [text stringByReplacingCharactersInRange:range withString:string];
    text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSString *newString = @"";
    while (text.length > 0) {
        NSString *subString = [text substringToIndex:MIN(text.length, 4)];
        newString = [newString stringByAppendingString:subString];
        if (subString.length == 4) {
            newString = [newString stringByAppendingString:@" "];
        }
        text = [text substringFromIndex:MIN(text.length, 4)];
    }

    newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];

    if (newString.length >= 20) {
        return NO;
    }

    [textField setText:newString];

    return NO;
    }

これがあなたに役立つことを願っています..

于 2013-01-16T13:45:26.010 に答える