Вы можете обрабатывать все нажатия кнопок одним и тем же методом, где (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;
}