Не удалось найти представляющий контроллер представления UIContextMenuConfiguration
У меня есть родитель, который представляет контроллер дочернего представления.
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
. Это не сработает, и я предполагаю, потому что это контроллер дочернего представления, но не знаю, почему и как это исправить.
1 ответ
Я получал ту же ошибку, я не уверен, такая же ситуация, как у вас, или нет, но вот описание моей ситуации и того, как я ее исправил:
Проблема заключалась в том, что я создавал UIWindow вручную, но я не использовал представление, возвращаемое свойством «view» UIViewController, а затем скрывал UITransitionView, поскольку он блокировал остальную часть содержимого, следовательно, содержимое, включая UINavigationBar и UITableView, которые меню, к которым были прикреплены меню, не были прямыми потомками UIViewController, таким образом, когда система проходила иерархию вверх, она не нашла UIViewController для представления меню, даже если он был в другой ветви иерархии UIWindow.
Исправление заключается в том, что как только UIWindow создается с UIViewController в rootViewController, мы запрашиваем его свойство "view", которое запускает создание иерархии UITransitionView, и, поскольку мы не используем перья, он создаст UIView, занимающий весь контент. площадь. Там мы можем прикрепить UINavigationBar и любой другой контент, который не будет заблокирован и будет потомком UIViewController, чтобы его можно было найти и избежать ошибки в заголовке этого вопроса.