如何在iOS上创建简单的退格按钮?

时间:2011-03-02 22:41:35

标签: iphone cocoa-touch

我有一个自定义数字小键盘,我想在其中包含一个特殊的“清除”按钮 - 或多或少的退格按钮,用于删除最后一个字符。我找不到任何方法让这个按钮工作。这是简单的代码:

-(IBAction)buttonDigitPressed:(id)sender {
    currentNumber = currentNumber*10 + (double)[sender tag];
    priceOne.text = [NSString stringWithFormat:@"%.2f",currentNumber / 100.0f];
}

-(IBAction)cancelOperation {
    (backspace code goes here)
}

任何想法都会很棒!谢谢!

2 个答案:

答案 0 :(得分:1)

将数字表示为floatdouble可能不是一个好主意;当您在文本字段中键入的数字不能完全表示为浮点数时,您可能会遇到浮点舍入错误。 (当然只会出现小数)。为什么不将号码存储为NSString?然后,您可以使用字符串操作简单地删除最后一位数字,并在需要数字值时使用[NSString doubleValue]将其转换为数字。


编辑:好的,所以这里还有一点。我们假设currentNumberNSMutableString*而不是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的观点,用浮点数或双数来表示货币价值可能是个坏主意;特别是如果你打算和他们一起做数学的话。