Вы немного озадачены тем, что означает @IBAction
.
Это способ связать действие в раскадровке - обычно .touchUpInside
для UIButton
- с функцией в вашем коде.Параметр sender
становится нажатой кнопкой.
Этот код, например:
@IBAction func buttonTapped(_ sender: UIButton) {
// code here
}
может быть назначен как действие .touchUpInside
для многихразные кнопки в вашем контроллере.Подумайте о наборе кнопок с номерами от 1 до 10. Подключите каждую кнопку к этому @IBAction
и:
@IBAction func buttonTapped(_ sender: UIButton) {
print("You tapped the button labeled: \(sender.currentTitle)")
}
Если у вас есть ссылка на объект кнопки, вы можете получитьназначенное ему действие (назначенное с помощью кода или раскадровки @IBAction
) с помощью метода actions(forTarget:forControlEvent:)
, но это довольно сложно и, вероятно, не подходит.
В качестве примера, хотя ... Предполагая, что у вас естьПо вашему мнению, кнопка, которая подключена к @IBAction
, показанному выше, вы можете сделать:
override func viewDidLoad() {
super.viewDidLoad()
for v in view.subviews {
if let b = v as? UIButton,
let a = b.actions(forTarget: self, forControlEvent: .touchUpInside) {
if a.contains("buttonTapped:") {
print("Found button with buttonTapped: IBAction \(b)")
}
}
}
}
Вам будет намного проще подключить свои кнопки к @IBOutlet
с (или к @IBOutlet Collection
. Если ваш код действительно пытается найти кнопку (или кнопки), подключенную к @IBAction
, вы, вероятно, захотите пересмотреть дизайн кода.