Я быстро создал небольшое приложение с использованием WKWebView, которое позволяет пользователю перейти на отзывчивый веб-сайт, на целевой странице есть опция, которая позволяет пользователям перейти на весь веб-сайт компании, после отображения страницы сайта я не имеют кнопки «Назад», чтобы вернуться на предыдущую страницу. Как быстро добавить кнопку возврата, которую пользователь может выбрать, чтобы вернуть его на исходную страницу адаптивного веб-сайта. Я новичок в этом, и любая помощь будет оценена по достоинству. Я включаю копию своего кода (ViewController.swift).
ViewController.swift
// wfmApp
//
// Created by Stefan Sanders on 9/13/18.
// Copyright © 2018 Stefan Sanders. All rights reserved.
//
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var wenView: WKWebView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let URLString = "https://www.wastefreemail.com/app"
let request = URLRequest(url:URL(string:URLString)!)
self.wenView.load(request)
self.wenView.addObserver(self, forKeyPath: #keyPath(WKWebView.isLoading), options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "loading" {
if wenView.isLoading {
activityIndicator.startAnimating()
activityIndicator.isHidden = false
} else {
activityIndicator.stopAnimating()
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}





Этот код возвращает на предыдущую страницу
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var wenView: WKWebView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let URLString = "https://www.wastefreemail.com/app"
let request = URLRequest(url:URL(string:URLString)!)
self.wenView.load(request)
self.wenView.addObserver(self, forKeyPath: #keyPath(WKWebView.isLoading), options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "loading" {
if wenView.isLoading {
activityIndicator.startAnimating()
activityIndicator.isHidden = false
} else {
activityIndicator.stopAnimating()
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func goBack(_ sender: Any) {
wenView.goBack()
}
}
Добавленная вами функция IBAction подключается к viewController (основная раскадровка, или мне нужно добавить кнопку возврата к основной раскадровке и подключить ее к этой кнопке возврата?)
Вам нужно добавить кнопку в Main Storyboard и связать ее с @IBAction func
Спасибо gms, но если я добавлю кнопку в основную раскадровку, то пользователь перейдет к URL-адресу на основе моего кода, как только они выберут ссылку на полную версию на адаптивном веб-сайте, они окажутся на веб-сайте за пределами приложения, поэтому я не думаю, что кнопка будет доступна, потому что раскадровка больше не является частью того, что увидит пользователь.
gms, с небольшой корректировкой, ваша рекомендация была отличной, спасибо.
Пожалуйста, проверьте Wkwebview backForwardList, вы получите полный список элементов назад и вперед, из списка вы можете получить backItem, и вы можете проверить, не является ли backitem равным нулю, это означает, что вы можете вернуться назад и так же, как вы можете получить forwarditem, и также можете показать кнопку вперед .Подробнее по ссылке назад вперед список
Обновлено с помощью swift 5.
import UIKit
import WebKit
class WebViewViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
webView = WKWebView()
webView.navigationDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.apple.com/in/")!
webView.load(URLRequest(url: url))
webView.allowsBackForwardNavigationGestures = true
navigationItem.rightBarButtonItems =
[ UIBarButtonItem(title: ">", style: .plain, target: self, action: #selector(goForward)),
UIBarButtonItem(title: "<", style: .plain, target: self, action: #selector(goBack))
]
let loader = UIActivityIndicatorView()
if webView.isLoading {
loader.startAnimating()
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: loader)
} else {
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(refreshButton))
}
}
@objc func goBack() {
webView.goBack()
}
@objc func refreshButton() {
navigationController?.popToRootViewController(animated: true)
}
@objc func goForward() {
webView.goForward()
}
func webView(_ webView: WKWebView, didFinish Navigation: WKNavigation!) {
title = "Demo"
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(refreshButton))
}
}
Возможный дубликат iOS - как программно создать кнопку возврата WKWebView?