“尝试在视图不在窗口层次结构中的VC上显示VC!”从表格视图按下按钮时

时间:2019-01-05 09:39:16

标签: ios swift uitableview uiviewcontroller xib

尝试构建我的第一个应用程序。使用TableView呈现4个不同的部分。每个部分都有自己的单元格类型,该类型在.xib文件中定义。在TableView的最后一部分中,一个单元格带有两个按钮,加号和减号。

例如,当按下加号按钮时,它将在与单元格相关的类中调用以下代码:

// link to the viewcontroller with the tableview in it
let mainViewController = ViewController()

// func called when plusbutton is tapped
@IBAction func plusButtonTapped(_ sender: UIButton) {
    // viewcontroller that should popup when the button is tapped
    let popup = PopupViewController()
    let sbPopup = SBCardPopupViewController(contentViewController: popup)
    // call to show()
    sbPopup.show(onViewController: mainViewController)
}


// show() function that is called
public func show(onViewController viewController: UIViewController) {
        self.modalPresentationStyle = .overCurrentContext
        viewController.present(self, animated: false, completion: nil)
 }

当我点击模拟器中的按钮时,它应该显示PopupViewController,但显示以下警告:

 Warning: Attempt to present "balance1.SBCardPopupViewController:     0x7fdf8752cb20> on <balance1.ViewController: 0x7fdf8743cac0> whose view is not in the window hierarchy!

我尝试研究该警告,并发现了与此相关的其他主题。没有一种解决方案对我有用。可能与我从.xib文件中定义的单元格调用plusButtonTapped()有关吗?

我在youtube上关注了本教程:https://www.youtube.com/watch?v=9yUIOjykPDU 一切进行到10:36为止,在同一按钮所在的VC上调用show()并调用该函数。在我的情况下,调用show()函数的plusButton驻留在单独的.xib文件中定义的单元上,因此不在(主)VC上(如本教程所示)。这与我面临的问题有关系吗?

1 个答案:

答案 0 :(得分:0)

错误消息看起来像是正确的。仅查看您的代码,“悬挂”的mainViewController尚未添加到窗口中。

// link to the viewcontroller with the tableview in it
let mainViewController = ViewController()

此行上方的注释似乎表明它是到父视图控制器的链接,但实际上是一个新实例化的视图控制器。您需要将实际的父级向下传递到层次结构中,以实现您想要的功能。

如果为每个单元格提供某种形式的“ presentationDelegate”(可以处理卡的所有演示文稿),则可以使自己更轻松。