2012-02-04 31 views
1

最近,我开始跟随在iTunes U.CS193p-添加退格键计算器

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]]; 

} 

我的问题是我不应该检查是否我的最后一个数字或操作数?如果操作数,没有执行,如果数字,删除它...

+0

是的,你应该检查。你显然知道你应该检查。你问来干什么? – 2012-02-04 20:32:49

回答

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]; 
} 
+0

如果小数点是最后一个字符? – vikingosegundo 2012-02-04 22:11:24

+0

啊好点。这是一个非常简单的修复,但我会将其添加到我的答案。 – 2012-02-05 00:30:54

1

我还通过2011年秋季班打算在iTunes U.

穿行为我们提供了一个实例变量userIsInTheMiddleOfEnteringANumber所以我只是检查看看是否是。

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

我使用Joe_Schmoe采取的办法,这是简单的。 (只需删除显示中的字符,直到到达最后)。

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

+0

你也可以使用自省权吗?检查它是否是一种数字,如果是这样的删除..如果它是一个数字不做任何事情? – lakesh 2012-02-06 07:40:23

+0

听起来很不错。你试过了吗? – aleene 2012-02-06 16:18:13

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]]; 
    } 
}