我在 iphone 应用程序中有一个文本字段,我想实现类似于 atms 输入的输入,您所要做的就是输入数字(不需要十进制字符输入)。我希望能够仅在此文本字段中使用数字键盘。例如,文本字段最初显示:
0.00
如果用户输入序列 1234,则文本字段将如下所示:
12.34
如果用户按下删除按钮,它也必须更新。
我在 iphone 应用程序中有一个文本字段,我想实现类似于 atms 输入的输入,您所要做的就是输入数字(不需要十进制字符输入)。我希望能够仅在此文本字段中使用数字键盘。例如,文本字段最初显示:
0.00
如果用户输入序列 1234,则文本字段将如下所示:
12.34
如果用户按下删除按钮,它也必须更新。
对于格式化,我认为您会对这篇描述如何使用NSNumberFormatter显示前导零和尾随零的其他 SO 帖子中的详细信息感到非常满意。从该帖子中提取和调整:
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。每次有来自键盘的新输入以刷新值时,您都可以调用这些代码。
我成功使用以下代码
- (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";
简单,只需将文本字段对象的 editingChanged 事件连接到您的类中的方法,每次调用“editingChanged”方法时,删除所有“额外”字符(在您的情况下为小数点),如下所示:
NSString *newContents = self.AtmTextField.text;
newContents = [newContents stringByReplacingOccurrencesOfString:@"." withString:@""];
然后根据需要重新格式化 newContents,并将其重新设置为 UITextField 的文本
我刚刚打开了内置此功能的源代码SATextField 。只需将其设置fixedDecimalPoint
为YES
。
编辑:我创建了一个包含此功能的新项目:STAControls(特别是使用STAATMTextField
——它甚至支持.
输入!)。不同之处在于,这个项目已经作为一个合法的子类来实现,UITextField
而SATextField
仅仅是一个包含UITextField
实例的容器类。
我的建议?摆脱文本字段。摆脱标准键盘并为任务添加您自己的 UIButtons。
我为应用程序做了类似的事情。我从一个 UITextField 和默认键盘开始,但过了一段时间我发现如果我使用 12 个 UIButtons 和一个 UILabel 会容易得多。