#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 нулю