我有一个父对象,它呈现一个子视图控制器。
view.addSubview(commentController.view)
addChild(commentController)
commentController.didMove(toParent: self)非常基本的东西,一切都运行得很好。
直到我实现了
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? 每当我长按一个应该显示UIMenu的单元格时,我都会收到这个错误:Failed to find a presenting view controller for view. The interaction's view (or an ancestor) must have an associated view controller for presentation to work
我以前从未见过这个错误,而且我在任何地方都找不到它。
看起来我没有任何委托方法来将表示定向到特定的视图控制器。
例如,如果我想在这个孩子上面显示一个模式,我可以这样做:
parent?.present(vc, animated: true)
我不知道该怎么解决这个问题。
所以总结一下这个问题:
我有一个带有UITableView的子视图控制器。我正在尝试使用委托方法来表示一个UIMenu。它不会工作,我假设是因为它是一个子视图控制器,但不知道为什么或如何修复它
发布于 2021-07-11 17:07:30
我收到了同样的错误,我不确定这是不是与你完全相同的情况,但这里描述了我的情况以及我是如何修复它的:
问题是我手动创建了UIWindow,但没有使用UIViewController的“UITransitionView”属性返回的视图,然后隐藏了视图,因为它阻塞了其余内容,因此内容,包括UINavigationBar和附加了菜单的UITableView不是UIViewController的直接后代,因此当系统向上遍历层次结构时,它没有找到UIViewController来显示菜单,即使在UIWindow层次结构的不同分支中也有一个。
修复方法是,一旦在rootViewController中使用UIWindow创建了视图,我们就会查询它的“UIView”属性,这将触发UITransitionView层次结构的创建,因为我们没有使用nibs,所以它将创建一个占据整个内容区域的UIView。在那里,我们可以附加UINavigationBar和任何其他内容,这些内容将不会受到阻碍,并且是UIViewController的后代,因此可以找到它,并避免此问题标题中的错误。
https://stackoverflow.com/questions/64321939
复制相似问题