CS193P - Добавление кнопки отмены в калькулятор iOS - PullRequest
2 голосов
/ 28 января 2012

Я недавно начал посещать онлайн-курс по разработке iPhone для Стэнфордского университета в iTunes U.

Сейчас я пытаюсь выполнить домашние задания для первой пары лекций. Я прошел через пошаговое руководство, где построил базовый калькулятор, но сейчас я пытаюсь выполнить первое задание и, похоже, не могу его решить. Это следующее:

Добавьте кнопку «C», которая очищает все (например, отображение в вашем представлении, стек операндов в вашей модели, любое состояние, которое вы поддерживаете в контроллере и т. Д.). Убедитесь, что 3 7 C 5 отображает 5 на дисплее. Вам нужно будет добавить API к вашей модели для поддержки этой функции.

Какой API мне нужно добавить?

Я пробовал что-то вроде этого:

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

Я знаю, что это неправильно. Мне нужно некоторое руководство. Заранее спасибо .. Извините, если вопрос глупый ..

Ответы [ 6 ]

3 голосов
/ 11 августа 2012

Вот как я это сделал:

Код в 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
}
2 голосов
/ 03 февраля 2012

Я также прохожу осеннюю версию 2011 года на iTunesU.Вот как я это сделал.

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

Единственное, что мне фактически не нужно было добавлять API в мою модель.Поскольку в контроллере есть переменная экземпляра CalculatorBrain, я просто выбрасываю ее, и, поскольку мы лениво создаем экземпляр нашего метода получения мозгов, я получу новый (уже очищенный) при следующем вызове метода получения.

1 голос
/ 30 января 2012

Вы также должны очистить стек:

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

и в executeOperation: add:

else if ([operation isEqualToString:@"C"])
{
    [self.operandStack removeAllObjects];
    result = 0;
}
1 голос
/ 29 января 2012

Вы в основном хотите сбросить все свои переменные.Предполагая, что вы используете UILabel, потребуется строка NSString, так что вам будет лучше:

self.display.text = @"0";

Затем просмотрите все другие свойства и переменные экземпляра, которые у вас есть, и установите затем значения по умолчанию.Все, что является объектом, хочет быть равным нулю.так что если вы храните какие-либо строки, например.И любые числа, которые вы держите, установите на 0. Или 0.0f, если они являются числами с плавающей запятой.

Не совсем точно, что это за пример с калькулятором, но, надеюсь, это укажет вам правильное направление.*

Если нет, и вам нужна дополнительная помощь, не стесняйтесь, дайте мне знать:)

0 голосов
/ 04 февраля 2012

Ваш CancelPressed: выглядит хорошо.

Обратите внимание, что вы можете удалить (id) отправителя в вызове. Вы не знаете, с какой кнопки отправлено сообщение.

И вы можете сделать только (немного короче):

self.Display.text = @"";
0 голосов
/ 02 февраля 2012

Я думаю, что cancelPressed будет примерно таким:

- (IBAction)CancelPressed:(id)sender {

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

}
...