2015-07-25 9 views
22

Dies ist der Code, den ich jetzt habe, aus einer Antwort auf eine ähnliche Frage.Make button open link - Swift

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

Die Taste wird als Google-Taste und der Text ist www.google.com

Wie kann ich den Link machen öffnen, wenn ich es drücken?

+0

Swift 3: UIApplication.shared.open (NSURL (string: "http://www.google.com") als URL, Optionen: [:] , FertigstellungHandler: null) – kavehmb

Antwort

48

Was Sie in Ihrem Code die Aktion gezeigt haben, die auftreten würde, sobald die Schaltfläche angeklickt wird nicht die eigentliche Schaltfläche. Sie müssen Ihre Schaltfläche mit dieser Aktion verbinden.

(Ich habe die Aktionsnamen unter umbenannt als GoogleButton für eine Aktion nicht ein guter Name ist)

In 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")!) 
} 

In IB:

enter image description here

Edit: In Swift 3 hat sich der Code zum Öffnen eines Links in Safari geändert. Verwenden Sie stattdessen UIApplication.shared().openURL(URL(string: "http://www.stackoverflow.com")!).

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

+0

Wow, ich wusste nicht, dass es eine Liste von Methoden zeigt, wenn Sie auf das View-Controller-Icon ziehen. Danke, das ist nützlich :) – FreeNickname

+1

"'openURL' war veraltet in iOS 10.0: Bitte verwenden Sie openURL: Optionen: completionHandler: stattdessen" - Ich bin neu bei Swift (& Swift 3), ich bin mir nicht sicher, was diese Syntax ist. Es genügt zu sagen, was auch immer. –

+7

Verwenden Sie für Swift 3: 'if let url = NSURL (Zeichenfolge:" http://www.google.com ") { UIApplication.shared.open (URL als URL, Optionen: [:], completionHandler: nil) } ' –

4

Der Code, den Sie haben, sollte den Link ganz gut öffnen. Ich glaube, dass Sie dieses Codefragment wahrscheinlich einfach in Ihren Code kopiert haben. Das Problem ist, dass die UI-Komponente (Schaltfläche) in der Benutzeroberfläche (am wahrscheinlichsten im Storyboard) nicht mit dem Code verbunden ist. Das System weiß also nicht, dass beim Drücken der Taste dieser Code aufgerufen werden soll.

Um diese Tatsache zu dem System zu erklären, öffnen Sie die Storyboard-Datei, wo Ihre Google Button befindet, dann in Assistant-Editor öffnen Sie die Datei, wo Ihr func GoogleButton Code-Fragment befindet. Klicken Sie mit der rechten Maustaste auf die Schaltfläche und ziehen Sie die Linie zum Codefragment.

Wenn Sie diese Schaltfläche programmgesteuert erstellen, sollten Sie ein Ziel für ein Ereignis hinzufügen, z. B. UITouchUpInside. Es gibt viele Beispiele im Internet, so sollte es kein Problem sein :)

UPDATE: Wie bereits erwähnt, sollten Sie auch ein Protokoll zum Link hinzufügen ("http: //" oder " https: // "). Es wird nichts anderes tun.

17

Die Zeichenfolge, die Sie für die NSURL liefern, enthält die Protokollinformationen nicht. openURL verwendet das Protokoll, um zu entscheiden, welche App die URL öffnet.

Wenn Sie "http: //" zu Ihrer Zeichenfolge hinzufügen, kann iOS Safari öffnen.

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

perfekt! nur das Problem, das ich hatte und DUH! – jakeatwork

4

Für Swift 3.0:

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

Für swift3, wird im folgenden Code adaequat

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

als Openurl Methode in iOS ist veraltet 10, ist hier Lösung für iOS 10

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

    } 
+2

Die Frage ist es von einer Weile zurück und hat eine seriöse akzeptierte Antwort. Wenn Sie glauben, dass sich etwas geändert hat oder Ihre Antwort zutreffender ist, empfehle ich Ihnen, eine Erklärung hinzuzufügen. –

+1

Meine Antwort ist genauer für Anfänger. –

+1

Dann schlage ich vor, Sie so auf die Antwort anzugeben. –

3

wenn iOS 9 oder höher ist es besser, SafariServices zu verwenden, damit Ihr Benutzer Ihre App nicht verlässt.

import SafariServices 

let svc = SFSafariViewController(url: url) 
present(svc, animated: true, completion: nil) 
2

In Swift 4

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