2016-04-01 3 views
5

Al momento sto usando un pulsante sul mio uiwebview per tornare indietro attraverso ogni pagina web che l'utente cerca e funziona perfettamente. Ma c'è comunque la possibilità di utilizzare il pulsante indietro della barra di navigazione per tornare indietro alle pagine Web precedenti e quando non ci sono più pagine per tornare indietro e quindi aprire il precedente controller di visualizzazione?Swift - Pulsante Indietro UIWebview con tasto di navigazione Barra posteriore

Ecco il codice im utilizzando per tornare che è solo collegato a un UIButton.

// Back button events 
func onBackButton_Clicked(sender: UIButton) 
{ 
    if(webview.canGoBack) 
    { 
     webview.goBack() 
    } 
} 

Qualsiasi aiuto sarebbe fantastico.

risposta

11

Aggiungendo al tuo codice potresti aggiungere un altro che verrebbe eseguito quando non c'è più la cronologia web e pop il controller di visualizzazione, che tornerebbe al controller di visualizzazione precedente (se hai i controller di visualizzazione in un controller di navigazione) :

if(webview.canGoBack) { 
    //Go back in webview history 
    webview.goBack() 
} else { 
    //Pop view controller to preview view controller 
    self.navigationController?.popViewControllerAnimated(true) 
} 

Inoltre, se si desidera rimuovere il default di nuovo tasto e utilizzare il pulsante personalizzato aggiungere questo codice in viewDidLoad:

self.navigationItem.backBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: self, action: "onBackButton_Clicked:") 

e cambiare il metodo di cui sopra da:

onBackButton_Clicked(sender: UIButton) 

a:

onBackButton_Clicked(sender: UIBarButtonItem) 
+0

che ha aiutato, ma ho dovuto cambiare a 'self.navigationController .popViewControllerAnimated (vero)' – ADuggan

+0

Aggiornato la risposta;) Speranza che ha aiutato –

+0

'' backBarButtonItem'' potrebbe non essere appropriato qui. Usa invece un '' leftBarButtonItem' personalizzato come menzionato da Maxime Vantillard di seguito. Il pulsante Indietro in iOS è effettivamente definito per il controller immediatamente sotto il controller più in alto. – RajV

4

vorrei suggerire di sovraccaricare la funzione del tasto indietro e controllare per la storia.

override func viewDidLoad { 
     super.viewDidLoad() 
     self.navigationItem.hidesBackButton = true 
     let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:") 
     self.navigationItem.leftBarButtonItem = newBackButton; 
    } 

    func back(sender: UIBarButtonItem) { 
     if(webview.canGoBack) { 
      webview.goBack() 
     } else { 
      self.navigationController.popViewController(animated:true) 
     } 
    } 
0

È necessario utilizzare il BackBarButton per 1. Andare indietro attraverso le pagine web precedenti 2. ritorno al controller precedente dalla prima pagina web caricata. Quest'ultimo requisito sembra essere soddisfatto con il BackButton su NavigationBar al momento. Quello che devi fare è aggiungere un numero personalizzato BackButton. ?

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    leftButton = UIButton(type: UIButtonType.Custom) 
    leftButton.frame = CGRectMake(0, 0, 36, 36) 
    leftButton.clipsToBounds = true 
    leftButton.setImage(UIImage(named: "yourBackButton.png"), forState: .Normal) // add custom image 
    leftButton.addTarget(self, action: "onBackButton_Clicked:", forControlEvents: UIControlEvents.TouchUpInside) 
    let leftBarButton = UIBarButtonItem() 
    leftBarButton.customView = leftButton 
    self.navigationItem.leftBarButtonItem = leftBarButton 
} 

func onBackButton_Clicked(sender: UIButton) 
{ 
    if(webview.canGoBack) { 
     webview.goBack() 
    } 
    else { 
     self.navigationController.popViewController(animated: true) 
    } 
}