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