@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
相关产品推荐
相关产品推荐

