Я пытаюсь позвонить по номеру, используя не конкретные номера, а номер, который вызывается в переменной, или, по крайней мере, сказать ему, чтобы он вытащил номер в вашем телефоне. Это число, которое вызывается в переменной, является числом, которое я получил с помощью синтаксического анализатора или с помощью sql веб-сайта. Я сделал кнопку, пытаясь позвонить по номеру телефона, хранящемуся в переменной, с функцией, но безрезультатно. Все поможет спасибо!
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)!)
}
источник
Автономное решение в 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) } } }
Вы должны быть в состоянии использовать
callNumber("7178881234")
для звонка.источник
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) } } } }
источник
Swift 3.0 и ios 10 или старше
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) } } }
источник
Хорошо, я получил помощь и разобрался. Также я установил симпатичную маленькую систему оповещений на случай, если номер телефона недействителен. Моя проблема заключалась в том, что я называл это правильно, но в номере были пробелы и нежелательные символы, такие как ("123 456-7890"). UIApplication работает или принимает, только если ваш номер («1234567890»). Таким образом, вы в основном удаляете пробелы и недопустимые символы, создавая новую переменную, которая извлекает только числа. Затем звонит на эти номера с помощью UIApplication.
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() } }
источник
Приведенные выше ответы частично верны, но с "tel: //" есть только одна проблема. После завершения вызова он вернется на главный экран, а не в наше приложение. Так что лучше использовать "telprompt: //", он вернется в приложение.
var url:NSURL = NSURL(string: "telprompt://1234567891")! UIApplication.sharedApplication().openURL(url)
источник
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) } } }
источник
options: [:], completionHandler: nil
являются аргументами по умолчанию, их можно опустить.Я использую этот метод в своем приложении, и он работает нормально. Надеюсь, это тоже может вам помочь.
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) }
источник
Swift 5: iOS> = 10.0
Работает только на физическом устройстве.
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) }
источник
В Swift 3
if let url = URL(string:"tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) { UIApplication.shared.openURL(url) }
источник
Я использую решение Swift 3 с проверкой номера
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)")!) }
источник
Это обновление ответа @Tom с использованием Swift 2.0. Примечание. Это весь класс CallComposer, который я использую.
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 } }
источник
openURL () устарел в iOS 10. Вот новый синтаксис:
if let url = URL(string: "tel://\(busPhone)") { UIApplication.shared.open(url, options: [:], completionHandler: nil) }
источник
Многие другие ответы не работают для Swift 5. Ниже приведено обновление кода для 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:
источник
Решение 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)
источник
Вот альтернативный способ сократить номер телефона до допустимых компонентов с помощью
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
источник
Для 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.") }
источник
if let phoneCallURL = URL(string: "tel://\(01234567)"), UIApplication.shared.canOpenURL(phoneCallURL) { UIApplication.shared.open(phoneCallURL, options: [:], completionHandler: nil) }
источник
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)
источник
Swift 3.0 и iOS 10+
UIApplication.shared.openURL(url)
был изменен наUIApplication.shared.open(_ url: URL, options:[:], completionHandler completion: nil)
опции и обработчик завершения не являются обязательными, рендеринг:
UIApplication.shared.open(url)
https://developer.apple.com/reference/uikit/uiapplication/1648685-open
источник
Для Swift 3.1 и обратно совместимого подхода сделайте следующее:
@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) } }
источник
Если в вашем номере телефона есть пробелы, сначала удалите их! Затем вы можете использовать принятое решение ответа .
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) } }
источник