尝试构建我的第一个应用程序。使用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上(如本教程所示)。这与我面临的问题有关系吗?
答案 0 :(得分:0)
错误消息看起来像是正确的。仅查看您的代码,“悬挂”的mainViewController尚未添加到窗口中。
// link to the viewcontroller with the tableview in it
let mainViewController = ViewController()
此行上方的注释似乎表明它是到父视图控制器的链接,但实际上是一个新实例化的视图控制器。您需要将实际的父级向下传递到层次结构中,以实现您想要的功能。
如果为每个单元格提供某种形式的“ presentationDelegate”(可以处理卡的所有演示文稿),则可以使自己更轻松。