Вы также можете сделать это программно с помощью метода addTarget() класса UIControl (из которого UIButton и другие элементы управления на iOS являются подклассами). Класс UIControl - это класс, который добавляет события и отправляет UIViews, поэтому он так полезен, когда вы создаете свои собственные виджеты - потому что вы просто получаете возможность позволять пользователям создавать приемники уведомлений о событиях для вашего виджета и позволяет ваш виджет легко отправляет события тем потребителям, не требуя многого дополнительного кодирования с вашей стороны в любом случае.
Механизм @IBAction является удобством при использовании Interface Builder, но он делает то же самое прозрачно. Преимуществом является то, что он делает ваш код более самостоятельным документированием. Если вы видите IBAction перед методом, вы сразу же знаете, что это событие (например, «действие»). Однако по мере того, как вы набираете время, вы обнаружите, что используете addTarget() так сильно, что хлопот делать это с помощью Interface Builder не стоит того, и вы просто запомните это, подобно тому, как кто-то запоминает, как программно создавать события в javascript.