我正在使用计算器只是为了好玩,所以我一直在尝试使行为尽可能与iOS7计算器相似。现在,我遇到了一个问题,当用户在计算器中输入数字时,我正在使用 stringByAppendingString
添加用户按下的每个数字。
因此,我已经想出了一种使用 NSNumberFormatter
格式化计算结果的方法,以显示逗号,如果结果是例如1000 = 1,000
。但是,对我的 UILabel Screen
执行更新用户当前正在键入的当前字符串要困难得多。只要用户输入2000 = 2,000
等号码,就会发生这种情况。
只是,对于用户类型2上面的情况更好地解释它,它将被发送到屏幕。然后,0将附加 stringByAppendingString
并发送到 Screen
,依此类推..
所以,我一直在尝试修改我的函数appendDigit,试图以这种方式在我的计算器中处理这种情况,
- (void)appendDigit:(NSString *)digit {
screenF = [[self screenValue] floatValue];
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(screenF) numberStyle:NSNumberFormatterDecimalStyle];
if ([self.Screen.text isEqualToString:@"0"] && ![digit isEqualToString:@"."]) {
self.Screen.text = digit;
} else if(self.userIsInTheMiddleOfEntereingANumber){
self.Screen.text = digit;
self.userIsInTheMiddleOfEntereingANumber = NO;
} else{
display = [Screen.text stringByAppendingString:digit];
self.Screen.text = display;
}
}
更新版 appendDigit ,
- (void)appendDigit:(NSString *)digit {
if ([self.Screen.text isEqualToString:@"0"] && ![digit isEqualToString:@"."]) {
self.Screen.text = digit;
} else if(self.userIsInTheMiddleOfEntereingANumber){
self.Screen.text = digit;
self.userIsInTheMiddleOfEntereingANumber = NO;
} else{
self.Screen.text = [Screen.text stringByAppendingString:digit];
float screenTmp = [[self screenValue] floatValue];
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(screenTmp) numberStyle:NSNumberFormatterDecimalStyle];
self.Screen.text = display;
}
}
这是我从 Screen
中获取浮点值的函数,我通常用于计算,但是,我试图用它来获取用户的当前数字到目前为止输入了它,
- (NSNumber *)screenValue {
NSNumberFormatter *numberFormat = [[NSNumberFormatter alloc] init];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;
[numberFormat setNumberStyle:NSNumberFormatterDecimalStyle];
return [numberFormat numberFromString:self.Screen.text];
}
这是我的计算器中的一个按钮(数字/数字)的示例
-(IBAction)Number8:(UIButton *)sender{
[self appendDigit:@"8"];
}
-(IBAction)Number9:(UIButton *)sender{
[self appendDigit:@"9"];
}
这就是我如何进行格式化以将逗号添加到计算结果中
-(IBAction)Equals:(UIButton *)sender{
[self MyOperations];
NSString *display = [NSNumberFormatter localizedStringFromNumber:@(result) numberStyle:NSNumberFormatterDecimalStyle];
self.Screen.text = display;
self.Method = 0;
self.userIsInTheMiddleOfEntereingANumber = NO;
}
嗯,我希望有人可以指导并解决这个问题。如果您需要更多信息或任何其他代码可能有助于更好地理解问题并找到解决方案,请告诉我,我很乐意将其添加到帖子中。在此先感谢:)
答案 0 :(得分:2)
不是附加每个数字用户正在键入,而是设置整个字符串。保持对键入的数字的引用。例如:
@property(nonatomic, strong) NSNumber *number;
每次用户键入数字时,请将其与数字组合。然后,在使用NSNumberFormatter
将其放入标签之前将其转换为字符串。
NSNumberFormatter *numberFormat = [[NSNumberFormatter alloc] init];
numberFormat.usesGroupingSeparator = YES;
numberFormat.groupingSeparator = @",";
numberFormat.groupingSize = 3;