十进制风格改进目标c计算器

时间:2012-06-11 11:33:23

标签: iphone objective-c ios nsstring

我正在为iOS做计算器教程,我做了一些关于做十进制风格的研究。到目前为止,在我的研究中,我已经阅读了下面的代码

- (IBAction)digitPressed:(UIButton *)sender {
    NSString *digit = sender.currentTitle;
    NSString *decimal = @".";
    BOOL decimalAlreadyEntered = [self.display.text rangeOfString:decimal].location == NSNotFound ? NO : YES;

    if (self.userIsInTheMiddleOfEnteringANumber) {
        if (([digit isEqual:decimal] && !decimalAlreadyEntered) || !([digit isEqual:decimal])) {
            [self.display setText:[[self.display text] stringByAppendingString:digit]];
        }
    }
    else if ([self.display.text isEqual:@"0"] && digit == decimal){
        [self.display setText:[[self.display text] stringByAppendingString:digit]];
        self.userIsInTheMiddleOfEnteringANumber = YES;
    }
    else {
        [self.display setText:digit];
        self.userIsInTheMiddleOfEnteringANumber = YES;
    }
}

此代码帮助我防止用户按下多个小数点,并将其仅限制为一个(如2.09所示)。凉!然而,在应用程序启动期间,当我按下小数点并按下一个数字(例如1)时,标签将仅显示(.1)而不是(0.1)。任何有关改进的帮助都非常感谢:)

1 个答案:

答案 0 :(得分:0)

In - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string你可以检查第一个值是否为“。”无论用户输入什么,都将文本值替换为“0”。仅当文本字段值为“.something”时才执行此检查。

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *symbol = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator];
    if (range.location == 0 && [string isEqualToString:symbol]) {
     // decimalseparator is first
        textField.text = [NSString stringWithFormat:@"0%@",textField.text];
        return YES;
      }
}