我在iphone应用程序中有一个文本字段,我想实现类似于atms输入的输入,您只需输入数字(不需要输入小数字符)。我希望能够在此文本字段中使用数字键盘。例如,文本字段最初显示:
0.00
如果用户输入序列1234,则文本字段将如下所示:
12.34
如果用户按下删除按钮,也必须更新。
答案 0 :(得分:6)
对于格式化,我认为您会对this other SO post中描述如何使用NSNumberFormatter显示前导和尾随零的详细信息感到非常满意。从该帖子中拉出并调整:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setFormat:@"##0.00"];
NSNumber* input; // Hook in your input
NSString* output = [NSString stringWithFormat:@"%@", [formatter stringFromNumber:input]]; // Hook to your text field
为了将1234的输入转换为12.34(并且可能是12的输入转换为0.12),请考虑您总是将输入的两位小数移位。
// int storedInput has already been set to 1234
int input = 5; // Next button that was pressed
storedInput = storedInput * 10 + input; // 1234 * 10 + 5 = 12345
float displayedValue = input * .01; // 123.45
NSNumber* output = [NSNumber numberWithFloat:displayedValue];
这两个代码段应该让您了解如何在程序中实现这些概念。至于删除...只需将storedInput设置为0.每次键盘输入一个新输入时,您都可以调用这些代码来刷新值。
答案 1 :(得分:2)
我使用以下代码
取得了成功- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(range.length==1)
{
if(enteredtext.length>1)
enteredtext = [enteredtext substringWithRange:NSMakeRange(0,enteredtext.length-1)];
}
else
{
if(enteredtext.length<9)
enteredtext = [NSString stringWithFormat:@"%@%@",enteredtext,string];
}
double amountindecimal = [enteredtext floatValue];
double res=amountindecimal * pow(10, -2);
NSString * neededstring = [NSString stringWithFormat:@"%.2f",res];
if([neededstring isEqualToString:@"0.00"])
enteredtext = @"0";
textField.text = neededstring;
return NO;
}
注意:
enteredtext
是static NSString
。viewdidload
fn中,设置enteredtext = @"0";
答案 2 :(得分:1)
简单,只需将文本字段对象的editingChanged事件连接到类中的方法,每次调用“editingChanged”方法时,删除所有“额外”字符(在您的情况下为小数点),如这样:
NSString *newContents = self.AtmTextField.text;
newContents = [newContents stringByReplacingOccurrencesOfString:@"." withString:@""];
然后根据需要重新格式化newContents,并将其重新设置为UITextField的文本
答案 3 :(得分:1)
我刚刚开通了内置此功能的源SATextField。只需将其 fixedDecimalPoint
设置为YES
。
编辑:我创建了一个包含此功能的新项目:STAControls(具体来说,使用STAATMTextField
- 它甚至支持.
入门!的)。不同之处在于,此项目已作为UITextField
的合法子类实现,而SATextField
仅仅是容纳UITextField
实例的容器类。
答案 4 :(得分:0)
我的建议?摆脱文本领域。摆脱标准键盘并为任务添加自己的UIButtons。
我为应用做了类似的事情。我开始使用UITextField和默认键盘,但过了一段时间我发现如果我使用12个UIButtons和一个UILabel会更容易。