【问题标题】:Decimal style improvement objective c calculator十进制风格改进目标 c 计算器
【发布时间】:2012-06-11 11:33:22
【问题描述】:

我正在为 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) 。非常感谢您对改进的任何帮助:)

【问题讨论】:

    标签: iphone objective-c ios nsstring


    【解决方案1】:

    在 - (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;
          }
    }
    

    【讨论】:

    • 首先,谢谢你,但是我没有在我的应用程序中使用文本字段。
    猜你喜欢
    • 2016-08-25
    • 2019-04-29
    • 2019-09-22
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2022-10-13
    相关资源
    最近更新 更多