You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@IBSegueAction有哪些有效方法签名?相关使用文档在哪?

@IBSegueAction 使用说明&合法方法签名汇总

基础定义

@IBSegueAction是iOS 13+/macOS 10.15+推出的Storyboard转场专用标记,作用是在Segue触发时自定义目标控制器的初始化逻辑,替代传统的prepare(for:sender:)方法做依赖注入,能避免目标控制器暴露不必要的可选属性。

合法方法签名变体

Swift 平台

  • 仅处理逻辑、无自定义返回值的最简写法:
    @IBSegueAction func handleSegue(_ segue: UIStoryboardSegue)
  • 带触发者参数的无返回值写法:
    @IBSegueAction func handleSegue(_ segue: UIStoryboardSegue, sender: Any?)
  • 自定义返回目标控制器(最常用,用于依赖注入):
    @IBSegueAction func makeTargetVC(_ segue: UIStoryboardSegue) -> TargetViewController?
  • 带触发者的自定义返回写法:
    @IBSegueAction func makeTargetVC(_ segue: UIStoryboardSegue, sender: Any?) -> TargetViewController?
  • 非可选返回值写法(确认初始化一定成功时使用):
    @IBSegueAction func makeTargetVC(_ segue: UIStoryboardSegue, sender: Any?) -> TargetViewController
  • macOS 平台变体:
    @IBSegueAction func makeTargetVC(_ segue: NSStoryboardSegue, sender: Any?) -> NSViewController?

Objective-C 平台

  • 无返回值基础写法:
    - (IBSegueAction)handleSegue:(UIStoryboardSegue *)segue;
  • 带触发者的无返回值写法:
    - (IBSegueAction)handleSegue:(UIStoryboardSegue *)segue sender:(id)sender;
  • 自定义返回目标控制器写法:
    - (TargetViewController *)makeTargetVC:(UIStoryboardSegue *)segue sender:(id)sender;

核心使用规则

  • 标记了@IBSegueAction的方法无需手动调用,直接在Storyboard的Segue连接面板中选择关联即可
  • 方法返回的控制器实例如果和Segue的目标控制器类型匹配,会覆盖Storyboard默认生成的实例
  • 方法参数最多支持2个,顺序固定为Segue实例在前,sender触发者在后,sender可以省略,Segue参数不能省略

实际使用示例

class BookListViewController: UIViewController {
    // 点击cell触发Segue时调用,sender为选中的图书ID
    @IBSegueAction func makeBookDetailVC(_ segue: UIStoryboardSegue, sender: Any?) -> BookDetailViewController? {
        guard let bookId = sender as? String else {
            return nil
        }
        // 直接通过构造器注入依赖,不需要给DetailVC写额外的可选存储属性
        return BookDetailViewController(bookId: bookId)
    }
}

内容的提问来源于stack exchange,提问作者Blazej SLEBODA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:39:01