我已经将用于打电话的代码从Objective-C转换为Swift,但在Objective-C中,我们可以设置我们想要打开的URL的类型(例如电话,短信,网络),如下所示:
@"tel:xx"
@"mailto:info@example.es"
@"http://stackoverflow.com"
@"sms:768number"
Swift中的代码是:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
我读过没有发布tel:
的任何方案参数,但我不知道Swift是否可以检测该字符串是用于拨打电话,发送电子邮件还是打开网站。或者我可以写:
(string : "tel//:9809088798")
答案 0 :(得分:75)
我很确定你想要:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(请注意,在您的问题文本中,您设置了tel//:
,而不是tel://
)。
NSURL的字符串init需要格式正确的URL。它不会将一堆数字变成电话号码。您有时会在UIWebView中看到电话号码检测,但这种情况比NSURL更高。
编辑:已添加!以下评论答案 1 :(得分: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);
}
}
}
现在,您应该可以使用callNumber("7178881234")
拨打电话。
答案 2 :(得分:6)
对于iOS中的Swift:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
答案 3 :(得分:6)
你需要记住删除空白或者它不会工作:
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
" telprompt://"将提示用户在" tel://"会直接打电话。
答案 4 :(得分:5)
@ confile:
问题是您的解决方案在之后没有返回应用程序 iOS7上的电话已经完成。 - 6月19日13:50
& @ Zorayr
嗯,好奇,如果有一个解决方案可以做到这一点..可能是一个 对iOS的限制。
使用
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
您将收到呼叫/取消的提示,但它会返回到您的应用程序。 AFAIK没有办法返回(没有提示)
答案 5 :(得分:4)
你必须插入" +" \是另一种方式
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);
}
}
}
答案 6 :(得分:4)
Swift 3的小更新
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
答案 7 :(得分:2)
以下代码段可以判断SIM卡是否存在,以及设备是否能够拨打电话,如果正常,则会拨打电话
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
}
答案 8 :(得分:0)
对于swift 3
if let phoneCallURL:URL = URL(string:"tel://\(phoneNumber ?? "")") {
let application:UIApplication = UIApplication.shared
if (application.canOpenURL(phoneCallURL)) {
application.open(phoneCallURL, options: [:], completionHandler: nil);
}
}
答案 9 :(得分:0)
对于swift 4:
func call(phoneNumber: String) {
if let url = URL(string: phoneNumber) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:],
completionHandler: {
(success) in
print("Open \(phoneNumber): \(success)")
})
} else {
let success = UIApplication.shared.openURL(url)
print("Open \(phoneNumber): \(success)")
}
}
}
然后,使用函数:
let phoneNumber = "tel://+132342424"
call(phoneNumber: phoneNumber)
答案 10 :(得分:0)
要快速拨打电话,只需使用以下代码:(我已经在XCode 11中进行了测试,很快5)
let phone = "1234567890"
if let callUrl = URL(string: "tel://\(phone)"), UIApplication.shared.canOpenURL(callUrl) {
UIApplication.shared.open(callUrl)
答案 11 :(得分:0)
Swift 4及以上
let dialer = URL(string: "tel://5028493750")
if let dialerURL = dialer {
UIApplication.shared.open(dialerURL)
}
答案 12 :(得分:-1)
Swift 4.2中的相同答案
func dialNumber(number : String) {
if let url = URL(string: "tel://\(number)"),
UIApplication.shared.canOpenURL(url) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:], completionHandler:nil)
} else {
UIApplication.shared.openURL(url)
}
} else {
// add error message here
}
}
像下面这样叫
dialNumber(number: "+921111111222")