Как предварительно загрузить WKWebviews из WKWebviews в swift5 - PullRequest
1 голос
/ 11 ноября 2019

У меня есть два независимых WKWebViewController. Я загружаю первый WKWebView, а затем еще один WKWebView при нажатии кнопки.

Поэтому я хочу загрузить еще один WKWebView заранее. Как я могу это сделать?

Каждый из двух контроллеров ViewC имеет WKWebView.

mainstory

Первый WKWebView

    func openSecondScreen(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController
        openSecondScreen.modalPresentationStyle = .overCurrentContext
        openSecondScreen.modalTransitionStyle = .crossDissolve
        openSecondScreen.delegate = self
        self.navigationController?.pushViewController(openSecondScreen, animated: true)
    }

Второй WKWebView

    @IBOutlet var secondWKWebView: WKWebView!
    override func loadView() {
        super.loadView()

        let images = global.getIndicatorImage()
        let animatedImage = UIImage.animatedImage(with: images, duration: 1.0)
        self.indicatorImage.image = animatedImage


        contentController.add(self, name: "SecondWeb")

        config.userContentController = contentController

        secondWKWebView = WKWebView(frame: secondWKWebView.frame, configuration: config)

        secondWKWebView.uiDelegate = self
        secondWKWebView.navigationDelegate = self

        view.addSubview(secondWKWebView)
        view.addSubview(indicator)

        if contentController.userScripts.count > 0 {
            contentController.removeAllUserScripts()
        }
        let  localFilePath = Bundle.main.url(forResource: webUrl, withExtension: "html")
        let  myRequest = URLRequest(url: localFilePath)
        secondWKWebView.load(myRequest)
    }

Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 14 ноября 2019

Я думаю, что нашел решение. Но есть проблема. Я до сих пор вижу живое изображение индикатора. Я не думаю, что поиск завершен.

Первый WKWebView

    var openSecondScreen : SecondWebViewController!
    var preloadCheck = false
   ...
    func openSecondScreen(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        openSecondScreen = storyboard.instantiateViewController(withIdentifier: "SecondWebViewController") as! SecondWebViewController
        openSecondScreen.delegate = self
        openSecondScreen.loadViewIfNeeded()
        openSecondScreen.secondWKWebView.uiDelegate = self
        openSecondScreen.secondWKWebView.navigationDelegate = self
        preloadCheck = true
    }
....
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        if preloadCheck {
            self.navigationController?.pushViewController(openSecondScreen, animated: true)
            preloadCheck = false
        }
    }

Второй WKWebView

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        indicatorImage.isHidden = true
        indicatorImage.stopAnimating()
    }

Поэтому я решил проблему, скрыв индикаторизображение при отображении экрана.

Второй WKWebView

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        indicatorImage.isHidden = true
        indicatorImage.stopAnimating()
}

Когда вы нажимаете кнопку, чтобы открыть экран secondWebview, отображаются изображения индикатора на экране firstWebview изображения индикатора исчезают после завершения навигации, и появляется экран secondWebview preloaded.

...