Ответ 1
В iOS вы не устанавливаете прослушиватель; вы добавляете цель (объект) и действие (подпись метода, "селектор" на языке iOS) на ваш UIControl
(который UIButton
является подклассом):
button1.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button2.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
button3.addTarget(self, action: "buttonClicked:", for: .touchUpInside)
Первым параметром является целевой объект, в данном случае self
. Действие - это селектор (подпись метода), и есть в основном два варианта (подробнее об этом позже). Элемент управления бит, специфичный для UIControl
- .TouchUpInside
, обычно используется для нажатия кнопки.
Теперь действие. Это метод (это ваш выбор) одного из следующих форматов:
func buttonClicked()
func buttonClicked(_ sender: AnyObject?)
Для использования первого используйте "buttonClicked", для второго (который вы хотите здесь) используйте "buttonClicked:" (с завершающим двоеточием). sender
будет источником события, другими словами, вашей кнопкой.
func buttonClicked(_ sender: AnyObject?) {
if sender === button1 {
// do something
} else if sender === button2 {
// do something
} else if sender === button3 {
// do something
}
}
(это предполагает, что button1
, button2
и button3
являются переменными экземпляра).
Вместо этого один метод с большим оператором switch рассматривает использование отдельных методов для каждой кнопки. Основываясь на вашем конкретном случае использования, любой подход может быть лучше:
func button1Clicked() {
// do something
}
func button2Clicked() {
// do something
}
func button3Clicked() {
// do something
}
Здесь я даже не использую аргумент sender
, потому что мне это не нужно.
P.S.: Вместо того, чтобы добавлять цели и действия программно, вы можете сделать это в своем файле раскадровки или файла. Чтобы разоблачить действия, которые вы помещаете IBAction
перед вашей функцией, например:
@IBAction func button1Clicked() {
// do something
}