Не удалось найти представляющий контроллер представления 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, чтобы его можно было найти и избежать ошибки в заголовке этого вопроса.

Другие вопросы по тегам