電話をかけるためのコードをObjective-CからSwiftに変換しましたが、Objective-Cでは、次のように開くURLの種類(電話、SMS、Webなど)を設定できます。
@"tel:xx"
@"mailto:[email protected]"
@"http://stackoverflow.com"
@"sms:768number"
Swiftのコードは:
UIApplication.sharedApplication().openURL(NSURL(string : "9809088798")
tel:
のスキームパラメータをリリースしていないことを読みましたが、Swiftが文字列が電話をかける、メールを送信する、または開くためのものであるかどうかを検出できますかまたは私が書くことができます:
(string : "tel//:9809088798")
?
私はあなたが望むと確信しています:
UIApplication.sharedApplication().openURL(NSURL(string: "tel://9809088798")!)
(質問テキストでは、tel//:
ではなくtel://
と入力します)。
NSURLの文字列initは、整形式のURLを想定しています。たくさんの番号を電話番号に変えることはありません。 UIWebViewで電話番号の検出が表示される場合がありますが、NSURLよりも高いレベルで行われています。
編集:追加!以下のコメントごと
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")
を使用して呼び出しを行うことができるはずです。
Swiftの場合:
var url:NSURL? = NSURL(string: "tel://9809088798")
UIApplication.sharedApplication().openURL(url!)
空白を削除することを忘れないでください。削除しないと機能しません。
if let telephoneURL = NSURL(string: "telprompt://\(phoneNumber.stringByReplacingOccurrencesOfString(" ", withString: ""))") {
UIApplication.sharedApplication().openURL(telelphoneURL)
}
「telprompt://」は、ユーザーに電話またはキャンセルするように促しますが、「tel://」は直接電話します。
@ confile:
問題は、iOS7で通話が終了した後、ソリューションがアプリに戻らないことです。 – 6月19日13時50分
&@ Zorayr
うーん、そうする解決策があるかどうか興味があります..iOSの制限かもしれません。
つかいます
UIApplication.sharedApplication().openURL(NSURL(string: "telprompt://9809088798")!)
呼び出し/キャンセルのプロンプトが表示されますが、アプリケーションに戻ります。私の知る限り、戻る方法はありません(プロンプトなし)
Swift 3への小さな更新
UIApplication.shared.openURL(NSURL(string: "telprompt://9809088798")! as URL)
「+」を挿入する必要があります\は別の方法です
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);
}
}
}
次のコードスニペットは、SIMが存在するかどうか、デバイスが呼び出しを行うことができるかどうか、そしてOKの場合は呼び出しを行うかどうかを判断できます。
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
}
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)
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);
}
}