1

我最近开始在 iTunes U 上关注斯坦福大学关于 iPhone 开发的在线课程。

我现在正在为前几节课做家庭作业。我完成了构建基本计算器的演练,但现在我正在尝试第一个作业,但似乎无法解决。如下:

实现一个“退格”按钮,让用户在按错数字按钮时按下。这不是为了“撤消”,所以如果他们按错了操作按钮,他们就不走运了!由您决定如何处理他们在输入过程中退格离开整个数字的情况,但是让显示完全空白可能不是很用户友好。

我跟着这个:在iOS计算器上创建退格键

所以代码是

-(IBAction)backspacePressed:(UIButton *)sender {

    NSMutableString *string = (NSMutableString*)[display text];

    int length = [string length];

    NSString *temp = [string substringToIndex:length-1];

    [display setText:[NSString stringWithFormat:@"%@",temp]];

}

我的问题是我不应该检查我的最后一个是数字还是操作数?如果是操作数,则不执行,如果是数字,则将其删除...

4

4 回答 4

1

我使用了 Joe_Schmoe 采用的方法,这种方法很简单。(只需删除显示中的字符,直到结束)。

如果用户继续按“清除错误”,我也会从堆栈中删除一个项目。

于 2012-02-05T08:44:09.463 回答
1

我也在 iTunes U 上完成 2011 年秋季课程。

演练为我们提供了一个实例变量 userIsInTheMiddleOfEnteringANumber,所以我只是检查了一下是否为 YES。

- (IBAction)backspacePressed {
    if (self.userIsInTheMiddleOfEnteringANumber) {
        if ([self.display.text length] > 1) {
            self.display.text = [self.display.text substringToIndex:[self.display.text length] - 1];
        } else {
            self.display.text = @"0";
            self.userIsInTheMiddleOfEnteringANumber = NO;
        }
    }
}
于 2012-02-05T05:21:15.367 回答
1

我自己刚刚开始学习这门课程,这篇文章现在已经很老了,但我的解决方案可能会帮助其他人,如果没有别的,值得深思:

- (IBAction)deletePressed:(id)sender 
{
    NSString *displayText = [display text];
    int length = [displayText length];
    if (length != 1) {
        NSString *newDisplayText = [displayText substringToIndex:length-1];
        [display setText:[NSString stringWithFormat:@"%@",newDisplayText]];
    } else {
        userIsInTheMiddleOfEnteringANumber = NO;
        NSString *newDisplayText = @"0";
        [display setText:[NSString stringWithFormat:@"%@",newDisplayText]];
    }
}
于 2012-04-27T21:10:16.267 回答
1

首先,该代码中有几个不必要的步骤......要回答您的问题,是的,您应该检查操作数。以下是我如何通过检查编写该方法:

NSString *text = [display text];
int length = [text length];
unichar c = [text characterAtIndex:length];
NSCharacterSet *digits = [NSCharacterSet decimalCharacterSet];
if ([digits characterIsMember:c] || c == '.') {
    NSString *temp = [[display text] substringToIndex:length-1];
    [display setText:temp];
}
于 2012-02-04T21:33:25.753 回答