CS193P - 向iOS计算器添加取消按钮

时间:2012-01-28 19:58:47

标签: iphone objective-c cs193p

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

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

添加一个“C”按钮,清除所有内容(例如,View中的显示,模型中的操作数堆栈,控制器中维护的任何状态等)。确保3 7 C 5结果在显示屏中显示5。您必须向模型添加API才能支持此功能。

我需要添加哪些API?

我试过这样的事情:

- (IBAction)CancelPressed {
    self.Display.text = 0;
}

我知道这是错的。我需要一些指导。在此先感谢..如果问题是愚蠢的,请抱歉..

6 个答案:

答案 0 :(得分:3)

我是这样做的:

CalculatorViewController.m中的代码:

//********************************************************
//
//This method is called when the user presses the Clear
//button (labeled "C").
//
//********************************************************

- (IBAction)clearPressed {
    self.historyDisplay.text = @"";         //Clear history label
    self.display.text = @"0";               //Reset calculator display label to 0
    _userIsInTheMiddleOfTypingANumber = NO; //Reset the user tracking feature
    [self.brain clearStack];                //Calls method to "clear" the stack

    //The following line may not be needed depended on your implementation of the
    //decimal button. You may need something for your decimal implementation.
    _userAlreadyEnteredDecimal = NO;        //Reset the decimal boolean 
}

然后在CalculatorBrain.m中:

//********************************************************
//
//"Clear" all values off of the stack.
//
//********************************************************
- (void)clearStack
{
    _operandStack = nil; //Deallocate instance of the stack
}

答案 1 :(得分:2)

我也将在iTunesU上浏览2011年秋季版。这是我完成这个的方式。

- (IBAction)clearPressed {
    self.display.text = @"0";
    self.userIsInTheMiddleOfEnteringANumber = NO;
    self.brain = nil;
}

唯一的问题是我实际上没有为我的模型添加API。因为控制器有一个CalculatorBrain实例变量,我只是把它扔出去,而且由于我们懒得实例化我们的大脑吸气剂,下次我打电话给吸气剂时,我会得到一个全新的(已经清除)。

答案 2 :(得分:1)

您基本上想要重置所有变量。假设您正在使用UILabel,它将采用NSString,因此您可以更好地使用:

self.display.text = @"0";

然后浏览您拥有的所有其他属性和实例变量,然后设置为默认值。 任何对象都希望设置为nil。所以,如果你存储任何字符串,例如。你保持的任何数字,设置为0.或者如果它们是浮点数,则为0.0f。

不确定这个计算器的例子是什么,但希望这会让你朝着正确的方向前进。

如果没有,您需要更多帮助,请随时告诉我:)

答案 3 :(得分:1)

你也应该清理堆栈:

- (IBAction)clearPressed {
    double result = [self.brain performOperation:@"C"];
}

并在performOperation中添加:

else if ([operation isEqualToString:@"C"])
{
    [self.operandStack removeAllObjects];
    result = 0;
}

答案 4 :(得分:0)

我认为cancelPressed会像这样:

- (IBAction)CancelPressed:(id)sender {

        double result = [self.brain performOperation:@"C"];
        NSString *resultString = [NSString stringWithFormat:@"%g",result];
        self.Display.text = resultString;

}

答案 5 :(得分:0)

你的CancelPressed:看起来不错。

请注意,您可以删除通话中的(id)发件人。您不知道哪个按钮发送了消息。

你可以做(​​只是更短):

self.Display.text = @"";