我想写一个UITextField
,可以将号码自动格式化为银行号码。
例如:输入1234567890098765
将自动显示为1234 5678 9009 8765
。
我会使用textFieldDelegate
来执行此操作,但我不知道如何使用NSNumberFormatter
。
我该怎么做?
答案 0 :(得分: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
)。
答案 1 :(得分: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;
}
希望这可以帮助你..
答案 2 :(得分: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);