2011-03-02 74 views
0

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

-(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

这与Xcode无关,无法点击iPhone。 – 2011-03-02 22:43:28

回答

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

+0

我很抱歉,我有点困惑,并且对于所有这些iPhone编程还是很新的。现在当你说我应该把这个数字存储为一个NSString时,我该如何改变它呢? – 2011-03-03 00:13:37

0

好的,我会尝试解释你的示例,并引导你完成我将要做的事情,以获得像标准键盘退格按钮这样的行为。如果您想留下意见以纠正我的假设,我会相应更新。

您想要做的第一件事是跟踪视图控制器中当前活动的UITextField或键盘类。我能看到的唯一真正的选择是从尾部向后删除,因为没有非私有的方法来获取UITextField中的当前光标位置。假设priceOne是您的文本字段是这样的:

priceOne.text = [priceOne.text substringToIndex:priceOne.text.length - 1]; 

现在,这应该表现为长期罚款,你在文本字段中的文本,但你得问题,如果priceOne中有没有文本,以检查它的长度大于0.

为了真正获得标准键盘的行为,我建议考虑远离UIButton,以便您可以通过NSTimer在长按和其他细微行为中反复激发控件。

PS |我同意Tamás的看法,用浮点数或双精度表示货币值可能是一个糟糕的主意;特别是如果你打算和他们做数学。

相关问题