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
。
更多架构细节:
ViewController
与self.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 4 中使用 performSegue 打开的关闭页面时,如何在视图控制器和 TableViewController 之间传递数据?
当使用在swift 4中使用performSegue打开的dismiss页面时,如何在视图控制器和TableViewController之间传递数据?
self.performSegue 找不到storyboard-segue-ID,即使它已被命名
self.performSegue(withIdentifier: "teacherDetail", sender: self) 需要点击两次