Каков наилучший способ сохранить состояние WebView в iOS? - PullRequest
0 голосов
/ 14 января 2020

Например, когда я загружаю URL-адрес внутри WebView в приложении iOS, когда пользователь нажимает кнопку «Назад» и выполняет навигацию в других разделах приложения, а также когда пользователь возвращается в раздел WebView приложение, раздел WebView не должен быть перезагружен. Мало того, что даже если пользователь переходит к другим приложениям на смартфоне и возвращается в раздел приложения WebView, раздел WebView не должен перезагружаться. Как можно сохранить состояние WebView в iOS?

Любые возможные решения приветствуются!

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Если вы хотите, чтобы пользователь go обращался к одному и тому же URL каждый раз, когда они возвращаются в webView, попробуйте:

let defaultURLString = "https://yoursite.com/home"

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let defaultURL = URL(string: self.defaultURLString) {
        webView.load(URLRequest(url: defaultURL))
    }
}
0 голосов
/ 14 января 2020

Если вы хотите, чтобы пользователь не мог переходить к другим ссылкам в веб-представлении, установите для делегата значение self и добавьте метод делегата shouldStartLoadWith. Здесь вы можете проверить, щелкнул ли пользователь по ссылке, и запретить ему переходить куда-либо, например:

class TestViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet private(set) var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.webView.delegate = self

        let url = URL(string: "https://yoursite.com/home")
        self.webView.loadRequest(URLRequest(url: url!))
    }

    // MARK: UIWebViewDelegate

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
        if navigationType == .linkClicked {
            return false
        }
        return true
    }
}
0 голосов
/ 14 января 2020

Вы можете использовать UserDefaults, чтобы помочь с этим. Что-то вроде следующего непроверенного кода:

let defaultURLString = "https://yoursite.com/home"

override func viewDidLoad() {
    super.viewDidLoad()

    if let savedURL = UserDefaults.standard.url(forKey: "webViewUrl") {
        // Load webview with url here
        webView.load(URLRequest(url: savedURL))
    } else {
        // Load default url here
        if let defaultURL = URL(string: self.defaultURLString) {
            webView.load(URLRequest(url: defaultURL))
        }
    }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    if let currentUrl = webView.url {
        UserDefaults.standard.set(currentUrl, forKey: "webViewUrl")
    }
}

При запуске приложения может потребоваться очистить значения по умолчанию для клавиши webViewUrl.

...