Метод для отслеживания последней нажатой кнопки определенного типа - PullRequest
0 голосов
/ 09 декабря 2011

У меня есть простое приложение калькулятора.У меня есть 4 кнопки оператора и цифры номера калькулятора.Я хочу отслеживать, какая кнопка оператора была нажата последней.

При нажатии любой кнопки оператора ее метка меняет цвет с белого на оранжевый.Затем, когда нажимается цифровая кнопка, метка снова становится белой.То, что я хочу сделать, это сделать метку обратно оранжевой, если пользователь нажимает кнопку «Очистить» перед нажатием другого оператора или равно.

Моя идея состоит в том, чтобы внутри метода clearDisplay был оператор if, например: If (lastOperatorPressed == button1) {Измените его titleColor…

То есть, если пользователь вводит последовательность чисела затем нажимает +, кнопка + будет зарегистрирована как самая последняя нажатая кнопка оператора, а затем, если они продолжат вводить следующую серию чисел и до нажатия другого оператора или равенства или нажатия clear, сработает оператор my if внутри clearDisplay.

Я не могу найти способ отследить, какая кнопка оператора была нажата последней.

Любая помощь очень ценится.

1 Ответ

2 голосов
/ 09 декабря 2011

Вы можете обрабатывать все нажатия кнопок одним и тем же методом, где (id)sender - это значение аргумента, которое передается.Затем вы можете выполнить специфичную для кнопки обработку, сравнив (с приведением) значение (UIButton*)sender с конкретными значениями объекта кнопки.В этом единственном методе теперь у вас всегда есть значение отправителя, которое является последней нажатой кнопкой.Присвойте его переменной как lastButtonPressed = sender;

Обновление: Извините, это должно быть похоже на lastButtonPressed = (UIButton*)sender;

Вот еще несколько деталей:

Если вы используете Interface Builder,подключите каждую кнопку к методу обработчика кнопки в вашем контроллере представления.(Я не очень часто использую Interface Builder, но я думаю, что вы хотите соединить событие внутренней обработки с методом обработчика кнопок).

Если вы не используете Interface Builder, вы можете добавитьэта строка, где вы инициализируете свои ivars в контроллере представления.Предположим, что ваш обработчик кнопок называется buttonHandler: Сделайте это для каждой из ваших кнопок:

[oneOfYourButtons addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventTouchUpInside];
//... include this for each button ...
[anotherOneOfYourButtons addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventTouchUpInside];

В вашем файле заголовка создайте переменную экземпляра с именем lastButtonPressed (например).Инициализируйте его в nil в вашем файле реализации, где вы инициализировали другие ваши ivars.

Затем добавьте метод, подобный этому:

- (void)buttonHandler:(UIButton*)sender{

    if (sender == button1) {
       //... do things for button1
       // what you do here may depend on the value of lastButtonPressed, like this, for example
        if (lastButtonPressed == someButton) {
           //... do something 
           //... you may want to reset the value of lastButtonPressed
           lastButtonPressed = nil; 

    }
    else if (sender == button2) {
       //... do things for button2
    }
    else if (sender == button3) {
       //... do things for button3
    }
    else
       //... Repeat for all the buttons you want to handle. The compiler will optimize this so don't worry about that
       //...

    // probably at the end, you want to save the current button as the last button pressed
    lastButtonPressed = sender;


}
...