2014-06-16 4 views
31

Ich habe den Code für einen Anruf von Objective-C nach Swift umgewandelt, aber in Objective-C können wir den Typ der URL, die wir gerne öffnen (zB Telefon, SMS, Web), so einstellen:Wie benutzt man openURL um in Swift anzurufen?

@"tel:xx" 
@"mailto:[email protected]" 
@"http://stackoverflow.com" 
@"sms:768number" 

der Code in Swift ist:

UIApplication.sharedApplication().openURL(NSURL(string : "9809088798") 

ich gelesen, dass kein Schema Parameter für tel: freigegeben haben, aber ich weiß nicht, ob Swift erkennen kann, wenn die Zeichenfolge für einen Anruf ist Senden von E-Mails oder Öffnen einer Website. Oder darf ich schreiben:

(string : "tel//:9809088798") 

?

+0

sehe ich nicht, was das Problem ist. Hast Du es versucht? Hat es funktioniert? Und bitte lösche und wiederhole keine Fragen. –

+1

Mein Problem ist, dass ich möchte wissen, ob dies für den Aufruf richtig ist: UIApplication.sharedApplication(). OpenURL (NSURL (string: "9809088798") Weil nur den Emulator zum ausprobieren – user3739367

Antwort

66

Ich bin mir ziemlich sicher, dass Sie:

UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!) 

(beachten Sie, dass in Ihrer Frage Text, setzen Sie tel//:, nicht tel://).

NSURL String-Initialisierung erwartet eine wohlgeformte URL. Es wird eine Reihe von Zahlen nicht zu einer Telefonnummer machen. Manchmal wird die Telefonnummernerkennung in UIWebView angezeigt, aber das geschieht auf einer höheren Ebene als NSURL.

BEARBEITEN: Hinzugefügt! pro Kommentar unterhalb

+0

Nur eine kleine Korrektur UIApplication.sharedApplication(). openURL (NSURL (string: "tel: // 9809088798"!)!) Sie müssen das! nach dem NSURL verwenden, da es ein optionales zurückgibt. – Brduca

+0

das wird direkt anfangen, die Nummer anzurufen (natürlich nach 10.3 wird iOS um Erlaubnis bitten anzurufen) aber was ist, wenn ich das iPhone Dialer mit einer gefüllten Nummer öffnen muss? Kann ich das erreichen? – Suryakant

6

Für Swift in iOS:

var url:NSURL? = NSURL(string: "tel://9809088798") 
UIApplication.sharedApplication().openURL(url!) 
+0

das wird direkt anfangen, die Nummer anzurufen (natürlich nach 10.3 wird iOS um Erlaubnis bitten anzurufen) aber was, wenn ich die öffnen muss iPhone Dialer mit einer Nummer gefüllt ?? Kann ich das erreichen? – Suryakant

14

Eine eigenständige Lösung in Swift:

private func callNumber(phoneNumber:String) { 
    if let phoneCallURL:NSURL = NSURL(string:"tel://\(phoneNumber)") { 
    let application:UIApplication = UIApplication.sharedApplication() 
    if (application.canOpenURL(phoneCallURL)) { 
     application.openURL(phoneCallURL); 
    } 
    } 
} 

Jetzt sollten Sie in der Lage sein callNumber("7178881234") zu verwenden, um einen Anruf zu tätigen.

+0

Das Problem ist, dass Ihre Lösung nicht auf die App zurückgeht, nachdem der Anruf auf iOS7 beendet wurde. – confile

+0

Hm, neugierig, ob es eine Lösung gibt, die das tut .. könnte eine Einschränkung für iOS sein. – Zorayr

4

Sie fügen muss "+" \ ist eine andere Art und Weise

private func callNumber(phoneNumber:String) { 
    if let phoneCallURL:NSURL = NSURL(string:"tel://"+"\(phoneNumber)") { 
    let application:UIApplication = UIApplication.sharedApplication() 
    if (application.canOpenURL(phoneCallURL)) { 
     application.openURL(phoneCallURL); 
    } 
    } 
} 
5

@ confile:

Das Problem ist, dass Ihre Lösung nicht auf die App zurückkehrt, nachdem das Telefonat beendet hat auf iOS7. - 19. Juni bei 13:50

& @ Zorayr

Hm, neugierig, ob es eine Lösung gibt, die das tut tun .. könnte eine Beschränkung auf iOS sein.

Verwendung

UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!) 

Sie eine Aufforderung erhalten Call/Abbrechen, aber es gibt auf Ihre Bewerbung.AFAIK gibt es keinen Weg zurück (ohne Aufforderung)

5

Sie müssen daran denken, die Leerzeichen zu entfernen, oder es wird nicht funktionieren:

if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") { 
     UIApplication.sharedApplication().openURL(telelphoneURL) 
    } 

„telprompt: //“ fordert den Benutzer zu rufen oder Abbrechen, während "tel: //" direkt anruft.

4

Kleines Update zu Swift 3

UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL) 
2

Der folgende Codeausschnitt sagen kann, ob die SIM ist oder nicht, und wenn das Gerät in der Lage, den Anruf zu machen und wenn ok dann wird es den Anruf tätigen

var info = CTTelephonyNetworkInfo() 
    var carrier = info.subscriberCellularProvider 
    if carrier != nil && carrier.mobileNetworkCode == nil || carrier.mobileNetworkCode.isEqual("") { 
     //SIM is not there in the phone 
    } 
    else if UIApplication.sharedApplication().canopenURL(NSURL(string: "tel://9809088798")!) 
    { 
    UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!) 
    } 
    else  
    { 
     //Device does not have call making capability 
    } 
0

Für schnelle 3

if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")") { 
      let application:UIApplication = UIApplication.shared 
      if (application.canOpenURL(phoneCallURL)) { 
       application.open(phoneCallURL, options: [:], completionHandler: nil); 
      } 
     }