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 显示黑屏的主要内容,如果未能解决你的问题,请参考以下文章
具有缩放动画的 pushViewController,显示背景