识别哪个 segue 触发了 UIViewController

Posted

技术标签:

【中文标题】识别哪个 segue 触发了 UIViewController【英文标题】:Identify which segue triggered UIViewController 【发布时间】:2017-04-28 21:06:40 【问题描述】:

我有一个UIViewController 可以从来自其他各种UIViewControllers. 的多个popover segues 访问我需要根据发件人是谁,或者可能取决于segue 标识符来执行一些代码。我想知道是否有一种方法可以在弹出视图中获取此信息,而无需在父视图控制器中使用 prepareForSegue 方法。

我问是因为我的一些控制器非常简单并且完全在 IB 中构建,作为一个懒惰的程序员,我不想为它们创建自定义类。

【问题讨论】:

【参考方案1】:

如果唯一的问题是您不想为简单类创建自定义类,请实现 prepareForSegue 并通过检查 segue.identifier 了解触发了哪个 segue。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
// segue.identifier will give you which segue was triggered. Using this info you can branch out your logic......

【讨论】:

所以没有prepareForSegue就没有办法吗? 可能还有其他方法,但是即使您确实想出了一些将在执行 segue 时调用的方法。所以基本上你会尝试复制一些类似于 prepareForSegue 已经为你做的事情。 :) 写这个问题比为你的视图控制器创建一个自定义类要花更长的时间。您甚至可以创建一个可重用的视图控制器,只需将 segue 名称放入属性中即可。【参考方案2】:

使用这个override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool if identifier == "yourseguename" // do your stuff and then decide if you want to perform it return true return false

【讨论】:

以上是关于识别哪个 segue 触发了 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

查找单击了哪个单元格并执行 Segue

触发滑动手势取消 IBAction 的 Segue

自定义 UITableViewCell:以编程方式触发选择 segue

将 segued 数据存储在单独的视图控制器上(swift 4)

如何检查使用了哪个 segue

iOS - 自定义 segue 内存泄漏