PushViewController 显示黑屏

Posted

技术标签:

【中文标题】PushViewController 显示黑屏【英文标题】:PushViewController shows Black Screen 【发布时间】:2020-05-14 13:47:13 【问题描述】:

我的应用程序有问题。

我不是一个经验丰富的程序员,所以也许这只是一个简单的解决方案。我认为存在这个问题是因为我只是在尝试并使用我的应用程序,所以我制作了一个新应用程序并且存在同样的问题。

当我使用 navigationController?.pushViewController(PinkViewController(), animated: true) 推送到 ViewController 时。

我只是黑屏。如果我有类似的代码 Label.text = "String 在 PinkViewController() 的 viewdidload 中。我在这行代码中收到以下错误:

致命错误:在隐式展开时意外发现 nil 可选

我搜索了网络,但没有找到任何解决此问题的方法。我希望你能帮助我。

【问题讨论】:

故事板中是否定义了PinkViewController?如果是这样,从那里实例化它而不是调用它的构造函数。 您是在情节提要中定义PinkViewController 还是仅以编程方式定义为一个类?如果以编程方式完成,请改用PinkViewController(nibName: nil, bundle: nil) 你是如何实例化视图控制器的?显然,您的标签未链接到您的 xib / 故事板,因此崩溃。总是用驼峰命名你的变量 PinkViewController 在情节提要中定义。 【参考方案1】:

它崩溃的原因是你的标签可能被定义为一个@IBOutlet,它连接到你的故事板PinkViewController中的UILabel。但是,当您使用空构造函数实例化 PinkViewController 时,您不是“使用故事板方式”并且您的标签出口(这是非可选的,因为它可能在那里有一个感叹号)无法连接到您的视图控制器的情节提要实例。

所以你应该做的是以下选项之一:

如果您在情节提要中定义了PinkViewController,则必须以 nib 的方式实例化它,例如:

在您的 Storyboard 中,选择视图控制器,然后在 Identity Inspector 的右侧,提供一个 Storyboard ID。在代码中,您可以调用它来实例化您的视图控制器,然后推送它:

let pinkViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourIdentifier")

更好的是,您可以在情节提要中创建一个 Segue,方法是从当前 VC 拖动到 PinkViewController。有很多在线创建 Segues 的教程。如果您想以编程方式触发它,请不要忘记在情节提要中为 Segue 提供标识符。这可以通过调用来完成

self.performSegue(withIdentifier: "yourIdentifier", sender: nil)

如果您想在单击按钮时触发导航,您甚至可以将 Segue 从按钮拖到 PinkViewController,这样您甚至不需要在代码中调用它。

如果您仅以编程方式定义PinkViewController(通过创建一个符合UIViewController 的类命名),您可能想用PinkViewController(nibName: nil, bundle: nil) 实例化它(注意参数而不是空构造函数),然后使用您提供的代码推送它。

希望对您有所帮助,如果没有,请提供进一步的代码/项目见解。

【讨论】:

以上是关于PushViewController 显示黑屏的主要内容,如果未能解决你的问题,请参考以下文章

Linux VNC黑屏

Android视频查看黑屏

具有缩放动画的 pushViewController,显示背景

使用 PushViewController 时选项卡不显示

pushViewController调用的UIViewController的出现动画显示两次

使用 pushViewController 时没有 Xib 的 UIViewController 显示空白