CS193p - 向计算器添加退格键

时间:2012-02-04 20:20:22

标签: objective-c ios cocoa-touch cs193p

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

我正在尝试为前几个讲座做家庭作业。我跟着我构建了一个基本计算器的演练,但现在我正在尝试第一个任务,我似乎无法解决它。这是一个:

  

实施“退格”按钮,供用户按下错误的数字按钮时按下。这不是“撤消”,所以如果他们打了   错误的操作按钮,他们运气不好!这取决于你   决定如何处理他们退出整个区域的情况   数字他们正在进入,但有显示去   完全空白可能不是非常用户友好。

我遵循了这个:Creating backspace on iOS calculator

所以代码是

-(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 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:1)

我也将参加2011年秋季的iTunes U课程。

walk through为我们提供了一个实例变量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;
        }
    }
}

答案 2 :(得分:1)

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

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

答案 3 :(得分: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]];
    }
}