我知道过去曾经多次询问过,但我尝试的一切都失败了。我有一个带UILabel的自定义数字键盘。当我点击'1'时,UILabel显示一个。现在这就是我想要做的事情:
现在键盘和UILabel工作得很好。我只需要让小数点现在正常工作。任何示例代码都很棒,(我应该把它放在我的应用程序中)。如果您想查看我的代码,请告诉我。非常直截了当。谢谢大家!
答案 0 :(得分:4)
以下是我将如何做到这一点:
#define NUMBER_OF_DECIMAL_PLACES 2
NSMutableArray *typedNumbers = ...; //this should be an ivar
double displayedNumber = 0.0f; //this should also be an ivar
//when the user types a number...
int typedNumber = ...; //the number typed by the user
[typedNumbers addObject:[NSNumber numberWithInt:typedNumber]];
displayedNumber *= 10.0f;
displayedNumber += (typedNumber * 1e-NUMBER_OF_DECIMAL_PLACES);
//show "displayedNumber" in your label with an NSNumberFormatter
//when the user hits the delete button:
int numberToDelete = [[typedNumbers lastObject] intValue];
[typedNumbers removeLastObject];
displayedNumber -= (numberToDelete * 1e-NUMBER_OF_DECIMAL_PLACES);
displayedNumber /= 10.0f;
//show "displayedNumber" in your label with an NSNumberFormatter
键入浏览器。警告实施者。使用NSDecimal
代替double
的加分点。
解释发生了什么:
我们基本上做位移,但是在基数10而不是基数2.当用户键入数字(例如:6)时,我们将现有数字“移位”一个小数位(例如:0.000 => 00.00),将键入的数字乘以0.01(6 => 0.06),并将其添加到我们现有的数字(00.00 => 00.06)。当用户键入另一个数字(例如:1)时,我们会做同样的事情。向左移动(00.06 => 00.60),将键入的数字乘以0.01(1 => 0.01),并添加(00.60 => 00.61)。存储号码的目的是NSMutableArray
只是方便删除。但是,没有必要。只是方便。
当用户点击删除按钮(如果有)时,我们取最后输入的数字(例如:1),乘以0.01(1 => 0.01),从我们的数字中减去它(0.61 => ; 0.6),然后将我们的数字右移一位小数(0.6 => 0.06)。只要您输入的数字数组中有数字,就重复此操作。当该数组为空时禁用删除按钮。
使用NSDecimal
的建议只是为了允许非常高精度的数字。