2015-07-25 13 views
22

To jest kod, który mam teraz, zaczerpnięty z odpowiedzi na podobne pytanie.Przycisk Otwórz łącze - Swift

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

Przycisk nazywa Przycisk Google a jej tekst jest www.google.com

Jak mogę zrobić to otworzyć link po naciśnięciu go?

+0

Swift 3: UIApplication.shared.open (bibliotece NSURL (string: "http://www.google.com") jako URL, opcje: [:] , completeHandler: nil) – kavehmb

Odpowiedz

48

To, co pokazano w kodzie, działanie, które nastąpi po naciśnięciu przycisku, a nie przycisk rzeczywisty. Musisz połączyć swój przycisk z tą akcją.

(Mam przemianowany nazwa akcji poniżej jako GoogleButton nie jest dobra nazwa dla działania)

W kodzie:

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

W IB:

enter image description here

Edytuj: w Swift 3 zmienił się kod otwierający link na safari. Zamiast tego użyj UIApplication.shared().openURL(URL(string: "http://www.stackoverflow.com")!).

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

+0

Wow, nie wiedziałem, że pokazuje listę metod, jeśli przeciągniesz ctrl do ikony kontrolera widoku. Dzięki, jest to przydatne :) – FreeNickname

+1

"'openURL' był nieaktualny w iOS 10.0: Proszę użyć openURL: options: completionHandler: zamiast" - Jestem nowy w Swift (& Swift 3), nie jestem naprawdę pewien, co ta składnia jest. Wystarczy powiedzieć, cokolwiek. –

+7

Dla Swift 3 użyj tego: 'if let url = NSURL (ciąg:" http://www.google.com ") { UIApplication.shared.open (adres URL jako URL, opcje: [:], zakończenieHandler: zero) } ' –

4

Kod, który powinieneś otworzyć, wystarczy. Uważam, że prawdopodobnie po prostu wkleiłeś ten fragment kodu do swojego kodu. Problem polega na tym, że komponent interfejsu użytkownika (przycisk) w interfejsie (najprawdopodobniej w scenorysie) nie jest połączony z kodem. System nie wie, że po naciśnięciu przycisku powinien wywołać ten kod.

Aby wyjaśnić ten fakt systemowi, otwórz plik scenorysu, w którym znajduje się Twoja Google Button, a następnie w edytorze pomocniczym otwórz plik, w którym znajduje się fragment kodu func GoogleButton. Kliknij prawym przyciskiem myszy przycisk i przeciągnij linię do fragmentu kodu.

Jeśli utworzysz ten przycisk programowo, powinieneś dodać cel dla jakiegoś zdarzenia, na przykład UITouchUpInside. Istnieje wiele przykładów w internecie, więc nie powinno być problemu :)

UPDATE: Jak inni już wspomniano, należy również dodać protokół do łącza („http: //” lub " https: // "). W przeciwnym razie nic nie zrobi.

17

Ciąg, który podajesz dla NSURL, nie zawiera informacji o protokole. openURL używa protokołu, aby zdecydować, która aplikacja otworzyć adres URL.

Dodanie "http: //" do Twojego ciągu znaków pozwoli systemowi iOS otworzyć Safari.

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

idealne! tylko problem, który miałem i DUH! – jakeatwork

4

Swift 3.0:

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

Na Swift3 poniżej kodu działa poprawnie

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

jako metoda OpenURL jest przestarzała iOS 10, tutaj jest rozwiązanie 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

To pytanie od jakiegoś czasu i ma renomowaną, akceptowaną odpowiedź. Jeśli uważasz, że coś się zmieniło, a może twoja odpowiedź jest dokładniejsza, zalecam dodanie wyjaśnienia. –

+1

Moja odpowiedź jest dokładniejsza dla początkujących. –

+1

Następnie sugeruję, abyś tak wskazał na odpowiedź. –

3

czy iOS 9 lub nowszy lepiej korzystać z SafariServices, aby Twój użytkownik nie opuszczał Twojej aplikacji.

import SafariServices 

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

w Swift 4

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