我有一个自定义数字小键盘,我想在其中包含一个特殊的“清除”按钮 - 或多或少的退格按钮,用于删除最后一个字符。我找不到任何方法让这个按钮工作。这是简单的代码:
-(IBAction)buttonDigitPressed:(id)sender {
currentNumber = currentNumber*10 + (double)[sender tag];
priceOne.text = [NSString stringWithFormat:@"%.2f",currentNumber / 100.0f];
}
-(IBAction)cancelOperation {
(backspace code goes here)
}
任何想法都会很棒!谢谢!
答案 0 :(得分:1)
将数字表示为float
或double
可能不是一个好主意;当您在文本字段中键入的数字不能完全表示为浮点数时,您可能会遇到浮点舍入错误。 (当然只会出现小数)。为什么不将号码存储为NSString
?然后,您可以使用字符串操作简单地删除最后一位数字,并在需要数字值时使用[NSString doubleValue]
将其转换为数字。
编辑:好的,所以这里还有一点。我们假设currentNumber
是NSMutableString*
而不是double
。我正在编写下面的代码,但它显示了一般的想法:
- (IBAction)buttonDigitPressed:(id)sender {
[currentNumber appendString:[NSString stringFromFormat:@"%d", [sender tag]]];
priceOne.text = currentNumber;
}
- (IBAction)cancelOperation {
[currentNumber deleteCharactersInRange:NSMakeRange([currentNumber length]-1, 1)];
priceOne.text = currentNumber;
}
只要您需要文本框中的实际值,您只需说出[currentNumber doubleValue]
即可。实际上,您甚至不需要currentNumber,因为您可以直接开始操作priceOne.text
。
答案 1 :(得分:0)
好的,我将尝试解释您的示例并指导您完成我将采取的行为,例如标准键盘退格按钮。如果你想留下评论来纠正我的假设,我会相应更新。
您要做的第一件事是跟踪视图控制器中当前活动的UITextField
或键盘的类。我能看到的唯一真正的选择是从末尾向后删除,因为没有非私有方式来获取UITextField
中的当前光标位置。假设priceOne
是您的文本字段,例如:
priceOne.text = [priceOne.text substringToIndex:priceOne.text.length - 1];
现在,只要您在文本字段中包含文字,这应该会很好,但如果priceOne
中没有文字,则会出现问题,因此请检查其长度是否大于0。
为了真正了解标准键盘的行为,我建议您考虑远离UIButton
,以便您可以在长按和其他微妙的过程中通过NSTimer
重复触发控件的行为。
PS |我同意Tamás的观点,用浮点数或双数来表示货币价值可能是个坏主意;特别是如果你打算和他们一起做数学的话。