如何使用openURL在Swift中拨打电话?

use*_*367 39 nsurl openurl swift xcode6

我已经将用于打电话的代码从Objective-C转换为Swift,但在Objective-C中,我们可以设置我们想要打开的URL类型(例如电话,短信,网络),如下所示:

@"tel:xx"
@"mailto:info@example.es"
@"http://stackoverflow.com"
@"sms:768number"
Run Code Online (Sandbox Code Playgroud)

Swift中的代码是:

UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
Run Code Online (Sandbox Code Playgroud)

我读过没有发布任何方案参数tel:,但我不知道Swift是否可以检测该字符串是用于打电话,发送电子邮件还是打开网站.或者我可以写:

(string : "tel//:9809088798")
Run Code Online (Sandbox Code Playgroud)

Lou*_*nco 77

我很确定你想要:

UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
Run Code Online (Sandbox Code Playgroud)

(请注意,在你的问题文本中,你放了tel//:,而不是tel://).

NSURL的字符串init需要格式良好的URL.它不会将一堆数字变成电话号码.您有时会在UIWebView中看到电话号码检测,但这比NSURL更高.

编辑:添加!以下评论


Zor*_*ayr 16

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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您应该可以用来callNumber("7178881234")打电话了.


Vin*_*shi 7

对于iOS中的Swift:

var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
Run Code Online (Sandbox Code Playgroud)


Rob*_*aff 6

您需要记住删除空格,否则它将无法工作:

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

"telprompt://"将提示用户呼叫或取消,而"tel://"将直接呼叫.


小智 5

你必须插入 "+"\ 是另一种方式

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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Gle*_*enn 5

@ confile:

问题是,在iOS7上完成电话呼叫后,您的解决方案不会返回应用程序. - 6月19日13:50

&@ Zorayr

嗯,好奇,如果有一个解决方案确实这样做..可能是对iOS的限制.

使用

UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
Run Code Online (Sandbox Code Playgroud)

您将收到呼叫/取消的提示,但它会返回到您的应用程序.AFAIK没有办法返回(没有提示)


Pau*_*fel 5

Swift 3 的小更新

UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
Run Code Online (Sandbox Code Playgroud)