диалоговое окно предупреждения wkewbview не отображается на ipad

#ios #swift #wkwebview #uialertcontroller

#iOS #swift #wkwebview #uialertcontroller

Вопрос:

Я использую WKWebView.

Диалоговое окно предупреждения работает нормально на iPhone, но не отображается на iPad. Как я могу это исправить?

 func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
        
    let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)
    
    alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
        completionHandler()
    }))
    
    
    if UIDevice.current.userInterfaceIdiom == .pad {

        if let popoverPresentationController = alertController.popoverPresentationController {
            
            popoverPresentationController.sourceView = self.view
            popoverPresentationController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
            
            popoverPresentationController.permittedArrowDirections = []

        }

    } else {
        
        self.present(alertController, animated: true, completion: nil)
        
    }

}
  

Комментарии:

1. я программист Java. ios-прогаминг очень, очень новичок.

Ответ №1:

В случае iPad вы не представляете ViewController внутри if — let. Переместите self.present(alertController, animated: true, completion: nil) за пределы блока else.

 if UIDevice.current.userInterfaceIdiom == .pad {

        if let popoverPresentationController = alertController.popoverPresentationController {
            
            popoverPresentationController.sourceView = self.view
            popoverPresentationController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0)
            
            popoverPresentationController.permittedArrowDirections = []

        }

}
        
    self.present(alertController, animated: true, completion: nil)
  

В качестве дополнительного примечания проверьте, не равен ли AlertController.popoverPresentationController нулю