快速切换到 UITableViewController 时出现黑屏

Posted

技术标签:

【中文标题】快速切换到 UITableViewController 时出现黑屏【英文标题】:Black screen when segueing to UITableViewController in swift 【发布时间】:2015-06-01 23:06:26 【问题描述】:

所以我有一个 2 屏幕应用程序,一个主 ViewController 和另一个 ViewController,它会在按下按钮时继续运行。这一切都很好,现在仍然可以。

然后我创建了一个新的 ViewController,向其中添加了一个 TableView,嵌入了一个导航控制器并设置了我的表格。我为它创建了一个 segue,这是通过按下 textField 来实现的。这一切都很好,但偶尔,当它应该继续使用 TableView VC 时,它只会显示黑屏。没有错误报告,屏幕只是黑色,它永远不会改变。有时,但一切都很好。它似乎出现在我以某种方式更改表格之后。更烦人的是,当它在模拟器上运行时,如果我尝试在我的设备(iPhone 6)上运行构建,当 segue 发生时仍然会出现黑屏。我真的不知道哪些代码对您有用,所以请询问您是否想看一些。我将把代码放在 tableView 的 VC 上。

import UIKit

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UINavigationBarDelegate 

@IBOutlet private weak var tableView: UITableView!

var countryPicker = ["Colombia", "England", "France", "Germany", "Brazil", "Austria", "Spain", "Australia", "USA", "Berlin", "Thailand", "Northern Ireland", "New Zealand", "Hawaii", "Switzerland", "Sweeden", "Finland", "Turkey", "Russia", "Netherlands", "Japan"]


override func viewDidLoad() 
    super.viewDidLoad()
    self.tableView.rowHeight = 50
    self.tableView.backgroundView = UIImageView(image: UIImage(named: "TblBackground"))



func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

    return countryPicker.count


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell

    if (indexPath.row % 2 == 0) 

        cell.backgroundColor = UIColor.clearColor()

     else 

        cell.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.2)

        cell.textLabel?.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.0)

    

    var imageView: UIImage! = UIImage(named: "Australia")
    cell.imageView?.image = imageView
    cell.imageView?.highlightedImage = UIImage(named: "Australia1")

    cell.textLabel?.text = countryPicker[indexPath.row]

    cell.textLabel?.textColor = UIColor.whiteColor()

    return cell


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

    var cell = tableView.cellForRowAtIndexPath(indexPath)
    cell!.accessoryType = UITableViewCellAccessoryType.Checkmark
    cell?.textLabel!.textColor = UIColor.blueColor()



func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) 

    var cell = tableView.cellForRowAtIndexPath(indexPath)
    cell!.accessoryType = UITableViewCellAccessoryType.None
    cell?.textLabel!.textColor = UIColor.whiteColor()



 

感谢您的帮助!

【问题讨论】:

【参考方案1】:

对于为什么会发生这种情况仍然没有合乎逻辑的原因 - 但是完全清理构建文件夹已经阻止它发生。所以如果你有同样的问题,试试这个:

    在 Xcode 中,转到顶部栏并选择“产品” 当列表出现时,您会看到“清理”选项。 按住 alt 键,选项将变为“清理构建文件夹” 点击“清理构建文件夹”

【讨论】:

在 Objective C 中也有这个问题。清洁似乎并不总是有帮助。主要疼痛。 @Chris 当我在我正在从中分离的视图控制器的 viewDidLoad 上加载 MFMailComposeViewController 时,我遇到了这个问题。我通过将所有与 MFMailComposeViewController 相关的代码(调用电子邮件视图)从 viewDidLoad 移动到 viewDidAppear 来解决这个问题。如果您要在要从中进行切换的视图控制器的 viewDidLoad 中加载其他视图,请将其移至 viewDidAppear! @owlswipe 谢谢你。我仍然不明白为什么它必须在 ViewDidAppear 中,但它确实解决了问题。有没有人看过解释这个的文档? @Cathal 如果您尝试在您的视图仍在转换到屏幕上时加载邮件视图(也就是它已加载但未出现),ios 将会崩溃。等到它完成 segueing(也就是加载并出现)加载邮件窗口。

以上是关于快速切换到 UITableViewController 时出现黑屏的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 UITableView 上的“快速触摸”以切换到/从全屏?

如何以编程方式快速切换到暗模式

想要在Mac上快速切换用户,就要这样做!

快速切换到 UITableViewController 时出现黑屏

在 Vim 中快速从垂直拆分切换到水平拆分

从暗模式快速切换到亮模式时如何修复搜索栏