尝试在点击单元格时显示其视图不在窗口层次结构中

Posted

技术标签:

【中文标题】尝试在点击单元格时显示其视图不在窗口层次结构中【英文标题】:Attempt to present whose view is not in the window hierarchy when a cell is tapped 【发布时间】:2016-09-22 15:17:44 【问题描述】:

我目前正在开发一个带有 UITableViewController 的应用程序。这个想法是,当点击一个单元格时,会弹出一个信息页面,显示有关它的一些信息。因此,当点击时,我尝试在另一个类中呈现另一个 ViewController。但是,警告出现了,我不知道为什么。

我曾尝试在 *** 和其他网站上查看与我类似的问题,但它们对我来说没有多大意义。谁能解释这个警告背后的问题以及如何解决它?

我的一些代码:

override func tableView(_ tableView: UITableView, 
                        didSelectRowAt indexPath: IndexPath) 
    print("showing item info")
    let cell = tableView.cellForRow(at: indexPath)
    currentInfo = (cell?.textLabel?.text)!
    currentDes = descriptions[indexPath.row]
    currentBool = itemBools[indexPath.row]
    currentIndexPath = indexPath
    showInfo()



func showInfo() 
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ShowInfoViewController") as! ShowInfoViewController
    self.present(vc, animated: true, completion: nil)

警告信息是:

Attempt to present <Things_to_Do.ShowInfoViewController: 0x100b2fe20> on <Things_to_Do.TableViewController: 0x100b05eb0> whose view is not in the window hierarchy!

【问题讨论】:

【参考方案1】:

尝试添加演示风格

斯威夫特 2

vc.modalPresentationStyle = .FormSheet
vc.modalTransitionStyle = .CoverVertical

【讨论】:

【参考方案2】:

您正在尝试从窗口层次结构中不存在的类中呈现 ViewController。在执行该行之前,您需要检查self.present(vc, animated: true, completion: nil) 此行中的 self 是否是添加到窗口层次结构中的 ViewController。

【讨论】:

【参考方案3】:

我发现了我的问题。问题是因为我在情节提要上创建了一个 segue,将一个表格单元格连接到新的 ViewController。通过编写代码来呈现相同的 ViewController,XCode 感到困惑。

【讨论】:

以上是关于尝试在点击单元格时显示其视图不在窗口层次结构中的主要内容,如果未能解决你的问题,请参考以下文章

单击表格视图单元格时加载缓慢

尝试呈现其视图不在窗口层次结构中的 UIAlertController (Swift 3/Xcode 8)

点击表格视图单元格时显示操作表

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

插入视图控制器视图的层次结构时,UIView不会直接放在集合视图单元格的顶部

按下单元格中的按钮时显示新视图