WKWebview Контекстное меню для ссылки нажмите и удерживайте перехват вызывает проблему - PullRequest
0 голосов
/ 22 сентября 2018

Поэтому мое требование заключается в том, чтобы каждый раз, когда пользователь нажимал и удерживал ссылку веб-страниц, показанную в WKWebview, показывал таблицу действий с возможностью загрузки нажатого URL-адреса.

Я использую приведенный ниже код, чтобы определить, будет ли отображаться контекстное меню для нажатойurl

extension UINavigationController {


    override open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
            guard let alertController = viewControllerToPresent as? UIAlertController,
                alertController.preferredStyle == .actionSheet else {
                    // Not an alert controller, present normally
                    super.present(viewControllerToPresent, animated: flag, completion: completion)
                    return
            }
            guard let alertTitle = alertController.title else {
                return
            }
            guard let url = URL(string: alertTitle) else {
                return
            }
            if appDelegate.browserConfigration?.allow_downloads == false  {
                return
            }
            if   UIApplication.shared.canOpenURL(url) == false{
                super.present(viewControllerToPresent, animated: flag, completion: completion)
                return
            }
            //if it's valid url then only override UIAlertController, for long press gesture on url
            let customAlertController:UIAlertController = UIAlertController(title: alertTitle, message: nil, preferredStyle: .actionSheet)

            customAlertController.addAction(UIAlertAction(title: "DOWNLOAD_LINK".localized, style: .default, handler: { _ in
                //download this link
                Download.newDownload(downloadOrigin: url)
            }))

            customAlertController.addAction(UIAlertAction(title: "BUTTON_CANCEL".localized, style: .cancel, handler: { _ in

            }))
            if UIDevice.current.userInterfaceIdiom == .pad {
                //if it's valid url then only override UIAlertController, for long press gesture on url
                if let popoverController = customAlertController.popoverPresentationController {
                    popoverController.sourceView = self.view
                    guard let shareBarButton = TabContainer.currentInstance?.delegate?.getShareButton() else{
                        return
                    }
                    popoverController.barButtonItem = shareBarButton
                    //appDelegate.popOverDownloadLink = popoverController
                }
            }
            super.present(customAlertController, animated: flag, completion:completion)
    }

}

приведенный выше код прекрасно работает для iPhone, но для iPAD ActionSheet выполнен в виде PopOver, и этот также отлично работает, но всякий раз, когда отображается поповер, одновременно происходит поворот экрана, отображаются два всплывающих окна, один мой предоставленный popover для загрузки ссылки, а второй на самом деле контекстное меню для ссылки нажмите и удерживайте см. изображение для справки screenshot before rotate screenshot after rotate

Решение яищу -

1) При ротации контекстное меню не должно отображаться, только там должен быть мой предоставленный поповер для ссылки на скачивание.

2) Если я не могу добиться 1-го варианта отклонитьоба поповера при повороте тоже подходят мне.

...