@IBAction 是 macOS 和 iOS 开发中用于连接 UI 和代码的桥梁,特别是在使用 Storyboard / XIB 搭配 Interface Builder(IB) 时。
@IBAction 是一个属性修饰符,表示“这是一个可以在 Interface Builder 中连接的事件方法”。
它的作用是在 Storyboard 或 XIB 中将按钮、菜单项等控件的事件,连接到这个方法上。
示例代码
class ViewController: NSViewController {
@IBAction func buttonClicked(_ sender: Any) {
print("按钮被点击")
}
}
可以在 Xcode 的 Interface Builder 中:
1、拖动一个按钮到界面上。
2、按住 Control(⌃),拖拽按钮到 ViewController 类。
3、选择 Action 类型。
4、就会自动生成这个方法,或绑定到这个已有的 @IBAction 上。

相关操作可见《Learn the Basics of Interface Builder》,该教程中可以实现拖动。但在Xcode16中已经无法实现拖动和选择Action。
因为本文主要在于了解Storyboard 或 XIB中使用 @IBAction,因此,不做详细的研究。
和普通函数的区别
1、普通方法只能在代码中调用,@IBAction方法可以从 Interface Builder 中连接。
2、普通方法没有特殊标记,@IBAction方法会被标记为 Interface Builder 的目标方法。
3、普通方法不一定要暴露,@IBAction方法通常与 UI 交互紧密。
和 @objc 的关系?
@IBAction 本质上就是:
@objc func buttonClicked(_ sender: Any) { }
所以 @IBAction 默认隐式添加了 @objc 修饰符,可以被 Objective-C 的运行时调用(这是 Interface Builder 所依赖的机制)。
同类修饰符:@IBOutlet
1、@IBAction:连接 UI 控件的事件(动作)方法。
2、@IBOutlet:连接 UI 控件本身的引用变量。
应用场景
1、按钮点击事件。
2、菜单项选择事件。
3、拖动事件处理。
4、滑块、开关值改变事件等。
总结
@IBAction 是专门为 Interface Builder 准备的“事件处理”标记,用于响应 UI 控件的行为,比如点击按钮或选择菜单项。
使用 Storyboard / XIB 开发(不是SwiftUI)macOS/iOS App 时,想要连接按钮、菜单项、滑块等事件,就使用 @IBAction。
参考文章
Learn the Basics of Interface Builder:https://trailhead.salesforce.com/zh-CN/content/learn/modules/xcode-essentials/learn-interface-builder?utm_source=chatgpt.com