WKWebView, очевидно, не становится первым респондентом для UIMenuController на устройстве iOS (но хорошо на симуляторе)

Вот минимальный фрагмент кода, который приблизительно соответствует тому, что я делаю:

// Note: in my case, the webView is a subView of ViewController's main view.
func spawnUIMenuController(_ webView: WKWebView){
    webView.becomeFirstResponder()
    UIMenuController.shared.menuItems = [
        UIMenuItem(title: "item1", action: #selector(func1)),
        UIMenuItem(title: "item2", action: #selector(func2))
    ]

    let targetRect: CGRect = CGRect(x: 75, y: 75, width: 0, height: 0)
    UIMenuController.shared.setTargetRect(targetRect, in: webView)
    UIMenuController.shared.update()
    UIMenuController.shared.setMenuVisible(true, animated: false)
}

extension WKWebView {
    open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }
}

Когда я запускаю этот код на симуляторе iPhone iOS 11 по желанию, только мои элементы 'item1' и 'item2' появляются в UIMenuController, Однако, когда я запускаю его на реальном устройстве (iPhone, который работает на iOS 10.3), в меню появляются несколько дополнительных нежелательных элементов: "Искать", "Копировать" и "Вставить". Я могу избавиться от последних двух, продолжая переопределять другие классы, такие как UIView "s canPerformAction(), но после переопределения большого количества других классов (в том числе UINavigationController, ViewController класс, из которого оно пришло, и тому подобное UIScrollView), Я не смог остановить появление "Смотри вверх". Кто-нибудь знаком с этой проблемой? Есть идеи, как отлаживать, или я что-то делаю неправильно?

Кроме того, есть ли библиотека, которая имитирует UIMenuController без всякой боли цепочки ответчика? Я пробую MenuPopOverView ориентировочно, но он слишком глючный, чтобы использовать его как есть.

0 ответов

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