web-dev-qa-db-fra.com

Bouton Ouvrir le lien - Swift

C'est le code que j'ai maintenant, tiré d'une réponse à une question similaire.

@IBAction func GoogleButton(sender: AnyObject) {
    if let url = NSURL(string: "www.google.com"){
        UIApplication.sharedApplication().openURL(url)
    }
}

Le bouton s'appelle Google Button et son texte est www.google.com.

Comment est-ce que je le fais ouvrir le lien quand j'appuie dessus?

41
Thevesh Theva

Votre code indique l’action qui se produirait une fois le bouton enfoncé, plutôt que le bouton réel . Vous devez connecter votre bouton à cette action .

(J'ai renommé l'action car GoogleButton n'est pas un bon nom pour une action)

Dans du code:

override func  viewDidLoad() {
  super.viewDidLoad()

  googleButton.addTarget(self, action: "didTapGoogle", forControlEvents: .TouchUpInside)
}

@IBAction func didTapGoogle(sender: AnyObject) {
  UIApplication.sharedApplication().openURL(NSURL(string: "http://www.google.com")!)
}

En IB:

enter image description here

Edit: in Swift 3, le code permettant d'ouvrir un lien dans safari a été modifié. Utilisez plutôt UIApplication.shared().openURL(URL(string: "http://www.stackoverflow.com")!)).

Edit: in Swift 4 UIApplication.shared.openURL(URL(string: "http://www.stackoverflow.com")!)

74
Paul.s

La chaîne que vous fournissez pour le NSURL n'inclut pas les informations de protocole. openURL utilise le protocole pour décider quelle application ouvrir l'URL.

Ajouter "http: //" à votre chaîne permettra à iOS d'ouvrir Safari.

@IBAction func GoogleButton(sender: AnyObject) {
    if let url = NSURL(string: "http://www.google.com"){
        UIApplication.sharedApplication().openURL(url)
    }
}
22
Fruity Geek

comme la méthode openUrl est obsolète dans iOS 10, voici la solution pour iOS 10

let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)
10
Krishna Thakur
  if let url = URL(string: "your URL") {
        if #available(iOS 10, *){
            UIApplication.shared.open(url)
        }else{
            UIApplication.shared.openURL(url)
        }

    }
8
Suresh Mano

Pour Swift 3.0:

    if let url = URL(string: strURlToOpen) {
        UIApplication.shared.openURL(url)
    }
7
S Yoshida

si iOS 9 ou supérieur, il est préférable d'utiliser SafariServices, afin que votre utilisateur ne quitte pas votre application.

import SafariServices

let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
7
Adam Smaka

Dans Swift 4

if let url = URL(string: "http://yourURL") {
            UIApplication.shared.open(url, options: [:])
        }
6
oscar castellon

Le code que vous avez devrait ouvrir le lien très bien. Je crois que vous avez probablement simplement copié-collé ce fragment de code dans votre code. Le problème est que le composant d'interface utilisateur (bouton) de l'interface (dans le storyboard, très probablement) n'est pas connecté au code. Le système ne sait donc pas que lorsque vous appuyez sur le bouton, il doit appeler ce code.

Pour expliquer ce fait au système, ouvrez le fichier de scénario, où votre Google Button se trouve, puis dans l’éditeur adjoint, ouvrez le fichier où se trouve votre func GoogleButton Le fragment de code est localisé. Cliquez avec le bouton droit sur le bouton et faites glisser la ligne vers le fragment de code.

Si vous créez ce bouton par programme, vous devez ajouter une cible à un événement, par exemple UITouchUpInside. Il y a beaucoup d'exemples sur le Web, donc ça ne devrait pas être un problème :)

PDATE: Comme d'autres l'ont déjà noté, vous devez également ajouter un protocole au lien ("http: //" ou "https: //"). Il ne fera rien sinon.

4
FreeNickname

Pour Swift3, le code ci-dessous fonctionne correctement

@IBAction func Button(_ sender: Any) { 
   UIApplication.shared.open(urlStore1, options: [:], completionHandler: nil)     
 }
2
Garry

Ce code fonctionne avec Xcode 11

if let url = URL(string: "http://www.google.com") {
     UIApplication.shared.open(url, options: [:])
 }
0
Lisa