Swift 3:PerformSegue WithIdentifier 不显示视图控制器,没有错误

Posted

技术标签:

【中文标题】Swift 3:PerformSegue WithIdentifier 不显示视图控制器,没有错误【英文标题】:Swift 3: PerformSegue WithIdentifier Not Displaying View Controller, No Errors 【发布时间】:2016-10-13 15:58:50 【问题描述】:

当我执行下面的行时,我的目标视图控制器没有视觉呈现,但日志中没有错误:

performSegue (withIdentifier: "DetailsViewController", sender: self)

让我们从一个问题退后一步。想象一下我的成功设置:ViewController 已加载,并且在某些用户操作后,上面的行实际上会打开一个新的DetailsViewController。我测试了 - 一切都按预期工作 - 所以我知道它有效。

但是当我决定通过向我的ViewController 添加一个CamViewController 并在CamViewController 内的元素点击上执行segue 时,出现DetailsViewController 的问题就开始了,然后委托方法将此操作传递回ViewController 我将打开 DetailsViewController。使用这种架构设置,我在日志中没有任何错误,但视觉上没有任何内容打开。没有出现过DetailsViewController

更多架构细节:

ViewControllerself.present(camViewController, animated: true, completion: nil) 一起呈现CamViewController CamViewController 实现了一个协议来调用用户操作的一些方法 ViewController 符合 CamViewController 协议,并且委托方法在用户操作上成功运行(日志显示它正在工作) 使用 segue 标识符调用 DetailsViewController 已成功执行 performSegue (withIdentifier: "DetailsViewController", sender: self)DetailsViewController 永远不会显示在屏幕上。

下面的这个方法打印prepare for segue Optional("DetailsViewController"),听起来是正确的。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
   print("prepare for segue \(segue.identifier)")

我也尝试添加 super.performSegue - 不走运

【问题讨论】:

你能给我关于你正在添加到视图控制器的 camviewcontroller 的详细信息 没错,是open class CamViewController: UIViewController, XYManagerDelegate 你的日志什么也没说?也许关于视图层次结构 如何关闭 CamViewController?显示 CamViewController 后是否有可能有两个 DetailsViewController 实例? 【参考方案1】:

首先,我会将您的 segue 代码更改为类似这样的代码。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if (segue.identifier == "DetailsViewController")
        print("prepare for segue DetailsViewController")
      else 
        print("prepare for segue other")
    

【讨论】:

谢谢。它按预期打印prepare for segue DetailsViewController,所以我知道segue 是有效的并且似乎被正确触发。但没有显示视图控制器。

以上是关于Swift 3:PerformSegue WithIdentifier 不显示视图控制器,没有错误的主要内容,如果未能解决你的问题,请参考以下文章

没有 performSegue 的委托不会被调用 Swift 5

Swift performSegue 未执行 [重复]

swift 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?

当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?

self.performSegue 找不到storyboard-segue-ID,即使它已被命名

self.performSegue(withIdentifier: "teacherDetail", sender: self) 需要点击两次