5

我在 iphone 应用程序中有一个文本字段,我想实现类似于 atms 输入的输入,您所要做的就是输入数字(不需要十进制字符输入)。我希望能够仅在此文本字段中使用数字键盘。例如,文本字段最初显示:

0.00

如果用户输入序列 1234,则文本字段将如下所示:

12.34

如果用户按下删除按钮,它也必须更新。

4

5 回答 5

6

对于格式化,我认为您会对这篇描述如何使用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。每次有来自键盘的新输入以刷新值时,您都可以调用这些代码。

于 2011-02-18T15:36:20.870 回答
3

我成功使用以下代码

- (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
  • viewdidloadfn 中,设置enteredtext = @"0";
  • 将 UITextfield 初始文本设置为 0.00
  • 将 Textfield 的 Keyboardtype 设置为 NumberPad。
  • 此代码最多只能使用 8 位数字 (999999.99)。
于 2013-10-09T11:20:27.597 回答
1

简单,只需将文本字段对象的 editingChanged 事件连接到您的类中的方法,每次调用“editingChanged”方法时,删除所有“额外”字符(在您的情况下为小数点),如下所示:

NSString *newContents = self.AtmTextField.text;
newContents = [newContents stringByReplacingOccurrencesOfString:@"." withString:@""];

然后根据需要重新格式化 newContents,并将其重新设置为 UITextField 的文本

于 2011-02-18T15:31:38.977 回答
1

我刚刚打开了内置此功能的源代码SATextField 。只需将其设置fixedDecimalPointYES

编辑:我创建了一个包含此功能的新项目:STAControls(特别是使用STAATMTextField——它甚至支持.输入!)。不同之处在于,这个项目已经作为一个合法的子类来实现,UITextFieldSATextField仅仅是一个包含UITextField实例的容器类。

于 2013-05-08T12:41:48.813 回答
0

我的建议?摆脱文本字段。摆脱标准键盘并为任务添加您自己的 UIButtons。

我为应用程序做了类似的事情。我从一个 UITextField 和默认键盘开始,但过了一段时间我发现如果我使用 12 个 UIButtons 和一个 UILabel 会容易得多。

于 2011-02-18T15:25:56.750 回答