Saya mencoba menelepon nomor yang tidak menggunakan nomor tertentu tetapi nomor yang dipanggil dalam variabel atau setidaknya memberitahu nomor tersebut untuk menarik nomor di telepon Anda. Nomor yang dipanggil dalam variabel ini adalah nomor yang saya ambil dengan menggunakan parser atau mengambil dari situs sql. Saya membuat tombol mencoba memanggil nomor telepon yang disimpan dalam variabel dengan fungsi tetapi tidak berhasil. Apapun akan membantu terima kasih!
func callSellerPressed (sender: UIButton!){
//(This is calls a specific number)UIApplication.sharedApplication().openURL(NSURL(string: "tel://######")!)
// This is the code I'm using but its not working
UIApplication.sharedApplication().openURL(NSURL(scheme: NSString(), host: "tel://", path: busPhone)!)
}
sumber
Solusi mandiri di iOS 10, Swift 3 :
private func callNumber(phoneNumber:String) { if let phoneCallURL = URL(string: "tel://\(phoneNumber)") { let application:UIApplication = UIApplication.shared if (application.canOpenURL(phoneCallURL)) { application.open(phoneCallURL, options: [:], completionHandler: nil) } } }
Anda harus bisa menggunakan
callNumber("7178881234")
untuk melakukan panggilan.sumber
Swift 4,
private func callNumber(phoneNumber:String) { if let phoneCallURL = URL(string: "telprompt://\(phoneNumber)") { let application:UIApplication = UIApplication.shared if (application.canOpenURL(phoneCallURL)) { if #available(iOS 10.0, *) { application.open(phoneCallURL, options: [:], completionHandler: nil) } else { // Fallback on earlier versions application.openURL(phoneCallURL as URL) } } } }
sumber
Swift 3.0 dan ios 10 atau yang lebih lama
func phone(phoneNum: String) { if let url = URL(string: "tel://\(phoneNum)") { if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url as URL) } } }
sumber
Oke, saya mendapat bantuan dan menemukan jawabannya. Juga saya memasang sistem peringatan kecil yang bagus kalau-kalau nomor telepon tidak valid. Masalah saya adalah saya menelepon dengan benar tetapi nomor tersebut memiliki spasi dan karakter yang tidak diinginkan seperti ("123 456-7890"). Aplikasi UIA hanya berfungsi atau menerima jika nomor Anda adalah ("1234567890"). Jadi pada dasarnya Anda menghapus spasi dan karakter yang tidak valid dengan membuat variabel baru untuk hanya menarik angka. Kemudian panggil nomor tersebut dengan aplikasi UIA.
func callSellerPressed (sender: UIButton!){ var newPhone = "" for (var i = 0; i < countElements(busPhone); i++){ var current:Int = i switch (busPhone[i]){ case "0","1","2","3","4","5","6","7","8","9" : newPhone = newPhone + String(busPhone[i]) default : println("Removed invalid character.") } } if (busPhone.utf16Count > 1){ UIApplication.sharedApplication().openURL(NSURL(string: "tel://" + newPhone)!) } else{ let alert = UIAlertView() alert.title = "Sorry!" alert.message = "Phone number is not available for this business" alert.addButtonWithTitle("Ok") alert.show() } }
sumber
Jawaban di atas sebagian benar, tetapi dengan "tel: //" hanya ada satu masalah. Setelah panggilan berakhir, itu akan kembali ke layar beranda, bukan ke aplikasi kita. Jadi lebih baik menggunakan "telprompt: //", itu akan kembali ke aplikasi.
var url:NSURL = NSURL(string: "telprompt://1234567891")! UIApplication.sharedApplication().openURL(url)
sumber
Swift 3, iOS 10
func call(phoneNumber:String) { let cleanPhoneNumber = phoneNumber.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "") let urlString:String = "tel://\(cleanPhoneNumber)" if let phoneCallURL = URL(string: urlString) { if (UIApplication.shared.canOpenURL(phoneCallURL)) { UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil) } } }
sumber
options: [:], completionHandler: nil
adalah argumen default, Anda dapat menghilangkannya.Saya menggunakan metode ini di aplikasi saya dan itu berfungsi dengan baik. Saya harap ini dapat membantu Anda juga.
func makeCall(phone: String) { let formatedNumber = phone.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("") let phoneUrl = "tel://\(formatedNumber)" let url:NSURL = NSURL(string: phoneUrl)! UIApplication.sharedApplication().openURL(url) }
sumber
Swift 5: iOS> = 10.0
Hanya berfungsi di perangkat fisik.
private func callNumber(phoneNumber: String) { guard let url = URL(string: "telprompt://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) else { return } UIApplication.shared.open(url, options: [:], completionHandler: nil) }
sumber
Di Swift 3,
if let url = URL(string:"tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) { UIApplication.shared.openURL(url) }
sumber
Saya menggunakan solusi swift 3 dengan validasi nomor
var validPhoneNumber = "" phoneNumber.characters.forEach {(character) in switch character { case "0"..."9": validPhoneNumber.characters.append(character) default: break } } if UIApplication.shared.canOpenURL(URL(string: "tel://\(validNumber)")!){ UIApplication.shared.openURL(URL(string: "tel://\(validNumber)")!) }
sumber
Ini adalah pembaruan untuk jawaban @ Tom menggunakan Swift 2.0 Note - Ini adalah seluruh kelas CallComposer yang saya gunakan.
class CallComposer: NSObject { var editedPhoneNumber = "" func call(phoneNumber: String) -> Bool { if phoneNumber != "" { for i in number.characters { switch (i){ case "0","1","2","3","4","5","6","7","8","9" : editedPhoneNumber = editedPhoneNumber + String(i) default : print("Removed invalid character.") } } let phone = "tel://" + editedPhoneNumber let url = NSURL(string: phone) if let url = url { UIApplication.sharedApplication().openURL(url) } else { print("There was an error") } } else { return false } return true } }
sumber
openURL () sudah tidak digunakan lagi di iOS 10. Berikut sintaks barunya:
if let url = URL(string: "tel://\(busPhone)") { UIApplication.shared.open(url, options: [:], completionHandler: nil) }
sumber
Banyak dari jawaban lain tidak berfungsi untuk Swift 5. Di bawah ini adalah pembaruan kode untuk Swift 5:
let formattedNumber = phoneNumberVariable.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "") if let url = NSURL(string: ("tel:" + (formattedNumber)!)) { if #available(iOS 10.0, *) { UIApplication.shared.open(url as URL, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url as URL) } }
PS:
sumber
Solusi Swift 3.0:
let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "") print("calling \(formatedNumber)") let phoneUrl = "tel://\(formatedNumber)" let url:URL = URL(string: phoneUrl)! UIApplication.shared.openURL(url)
sumber
Berikut cara alternatif untuk mengurangi nomor telepon menjadi komponen yang valid menggunakan
Scanner
…let number = "+123 456-7890" let scanner = Scanner(string: number) let validCharacters = CharacterSet.decimalDigits let startCharacters = validCharacters.union(CharacterSet(charactersIn: "+#")) var digits: NSString? var validNumber = "" while !scanner.isAtEnd { if scanner.scanLocation == 0 { scanner.scanCharacters(from: startCharacters, into: &digits) } else { scanner.scanCharacters(from: validCharacters, into: &digits) } scanner.scanUpToCharacters(from: validCharacters, into: nil) if let digits = digits as? String { validNumber.append(digits) } } print(validNumber) // +1234567890
sumber
Untuk swift 3.0
if let url = URL(string: "tel://\(number)"), UIApplication.shared.canOpenURL(url) { if #available(iOS 10, *) { UIApplication.shared.open(url) } else { UIApplication.shared.openURL(url) } } else { print("Your device doesn't support this feature.") }
sumber
if let phoneCallURL = URL(string: "tel://\(01234567)"), UIApplication.shared.canOpenURL(phoneCallURL) { UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil) }
sumber
let formatedNumber = phone.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "") print("calling \(formatedNumber)") let phoneUrl = "tel://\(formatedNumber)" let url:URL = URL(string: phoneUrl)! UIApplication.shared.openURL(url)
sumber
Swift 3.0 & iOS 10+
UIApplication.shared.openURL(url)
diubah menjadiUIApplication.shared.open(_ url: URL, options:[:], completionHandler completion: nil)
opsi dan penangan penyelesaian adalah opsional, rendering:
UIApplication.shared.open(url)
https://developer.apple.com/reference/uikit/uiapplication/1648685-open
sumber
Untuk pendekatan Swift 3.1 & yang kompatibel ke belakang, lakukan ini:
@IBAction func phoneNumberButtonTouched(_ sender: Any) { if let number = place?.phoneNumber { makeCall(phoneNumber: number) } } func makeCall(phoneNumber: String) { let formattedNumber = phoneNumber.components(separatedBy: NSCharacterSet.decimalDigits.inverted).joined(separator: "") let phoneUrl = "tel://\(formattedNumber)" let url:NSURL = NSURL(string: phoneUrl)! if #available(iOS 10, *) { UIApplication.shared.open(url as URL, options: [:], completionHandler: nil) } else { UIApplication.shared.openURL(url as URL) } }
sumber
Jika nomor telepon Anda berisi spasi, hapus spasi terlebih dahulu! Kemudian Anda dapat menggunakan solusi jawaban yang diterima .
let numbersOnly = busPhone.replacingOccurrences(of: " ", with: "") if let url = URL(string: "tel://\(numbersOnly)"), UIApplication.shared.canOpenURL(url) { if #available(iOS 10, *) { UIApplication.shared.open(url) } else { UIApplication.shared.openURL(url) } }
sumber