iOS - Comment créer WKWebView Bouton de Retour par programmation?
Je cherche à créer un bouton de retour pour mon iOS WKWebView application, de sorte que lorsque l'utilisateur clique sur le bouton, il les prend à la précédente WKWebView page. J'ai trouvé de nombreux tutoriels sur la façon de le faire avec de l'IB, mais pas avec la droite code. C'est ce que j'ai à ce jour:
Original ViewController.swift:
import UIKit
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
private var webView: WKWebView!
let wv = WKWebView(frame: UIScreen.mainScreen().bounds) //needed for working webview
self.webView = WKWebView(frame: frame)
self.webView.navigationDelegate = self
func rightbutton(text: String, action: Selector) {
let rightButton = UIBarButtonItem(title: text, style: .Plain, target: self, action: action)
self.navigationItem.rightBarButtonItem = rightButton
}
func action() {
if self.webView.canGoBack {
print ("Can go back")
self.webView.goBack()
self.webView.reload()
} else {
print ( "Can't go back")
}
}
override func viewDidLoad() {
super.viewDidLoad()
guard let url = NSURL(string: "http://communionchapelefca.org/app-home") else { return }
wv.navigationDelegate = self
wv.loadRequest(NSURLRequest(URL: url))
view.addSubview(wv)
webView.goBack()
webView.reload()
prefButton()
//backButton()
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "receiveNotification:",
name: "BeaconServiceRegionEnter",
object: nil)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "receiveNotification:",
name: "BeaconServiceRegionUpdate",
object: nil)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "receiveNotification:",
name: "BeaconServiceRegionExit",
object: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
func prefButton () {
let image = UIImage(named: "icon-pref128") as UIImage?
let button = UIButton(type: UIButtonType.Custom) as UIButton
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
button.frame = CGRectMake(screenWidth * 0.85, screenHeight * 0.90, 56, 56) //(X, Y, Height, Width)
button.setImage(image, forState: .Normal)
button.addTarget(self, action: "buttonClicked:", forControlEvents:.TouchUpInside)
self.view.addSubview(button)
}
func buttonClicked(sender:UIButton)
{
UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
}
func receiveNotification(notification: NSNotification) {
print(notification.userInfo)
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .LinkActivated {
if let newURL = navigationAction.request.URL,
host = newURL.host where !host.containsString("communionchapelefca.org") &&
UIApplication.sharedApplication().canOpenURL(newURL) {
if UIApplication.sharedApplication().openURL(newURL) {
print(newURL)
print("Redirected to browser. No need to open it locally")
decisionHandler(.Cancel)
} else {
print("browser can not url. allow it to open locally")
decisionHandler(.Allow)
}
} else {
print("Open it locally")
decisionHandler(.Allow)
}
} else {
print("not a user click")
decisionHandler(.Allow)
}
}
}
Des suggestions? Merci à l'avance.
EDIT: attaché toute la ViewController plutôt que de l'extrait de code.
EDIT2: Réponse par k8mil était près que sa réponse n'a pas charger l'URL initiale. Ci-dessous est le seul réglage à partir de sa réponse:
private func createWebView() {
guard let url = NSURL(string: "http://communionchapelefca.org/app-home") else { return }
let frame = UIScreen.mainScreen().bounds //or different frame created using CGRectMake(x,y,width,height)
self.webView = WKWebView(frame: frame)
self.webView.navigationDelegate = self
self.webView.loadRequest(NSURLRequest(URL: url))
self.view.addSubview(self.webView)
}
OriginalL'auteur Greg Williams | 2016-04-07
Vous devez vous connecter pour publier un commentaire.
Essayer d'appeler
webView.goBack()
méthode sur votre WKWebView instance au lieuWKWebView.goBack()
. Aussi aprèsgoBack()
vous pouvez appeler unwebView.reload()
méthode pour vous assurer que vous êtes sur la bonne page.J'ai édité ton code un peu
Aussi, vous n'avez pas neeed une autre instance de WKWebView parce que vous avez déclaré précédemment :
private var webView : WKWebView!
de sorte qu'il n'est pas nécessaire :
Pour moi, il fonctionne.
Espérons que cela vous aidera 🙂
self.webView = WKWebView(frame: frame)
ligne. pensées?Découvrez édité réponse, et laissez-moi savoir si ça 😉
votre réponse était proche, mais j'ai dû retravailler le webview partie parce que le site initial n'était pas de chargement. J'ai mis le légèrement corrigée de la version du po. merci beaucoup pour votre aide!
OriginalL'auteur kamwysoc