Как сделать телефонный звонок в iOS 10 с помощью Swift?
Я хочу, чтобы мое приложение могло звонить на определенный номер при нажатии кнопки. Я пытался гуглить, но пока что нет ни одного для iOS 10 (где нет openURL). Может кто-нибудь привести пример для меня, как это сделать? Например, как:
@IBAction func callPoliceButton(_ sender: UIButton) {
// Call the local Police department
}
6 ответов
Вы можете позвонить так:
if let url = URL(string: "tel://\(number)") {
UIApplication.shared.openURL(url)
}
Для Swift 3+ вы можете использовать как
guard let number = URL(string: "tel://" + number) else { return }
UIApplication.shared.open(number)
OR
UIApplication.shared.open(number, options: [:], completionHandler: nil)
Убедитесь, что вы удалили строку номера телефона, чтобы удалить все экземпляры (
, )
, -
, или же space
,
задача
Позвонить с подтверждением номера телефона
подробности
Xcode 9.2, Swift 4
Решение
extension String {
enum RegularExpressions: String {
case phone = "^\\s*(?:\\+?(\\d{1,3}))?([-. (]*(\\d{3})[-. )]*)?((\\d{3})[-. ]*(\\d{2,4})(?:[-.x ]*(\\d+))?)\\s*$"
}
func isValid(regex: RegularExpressions) -> Bool {
return isValid(regex: regex.rawValue)
}
func isValid(regex: String) -> Bool {
let matches = range(of: regex, options: .regularExpression)
return matches != nil
}
func onlyDigits() -> String {
let filtredUnicodeScalars = unicodeScalars.filter{CharacterSet.decimalDigits.contains($0)}
return String(String.UnicodeScalarView(filtredUnicodeScalars))
}
func makeAColl() {
if isValid(regex: .phone) {
if let url = URL(string: "tel://\(self.onlyDigits())"), UIApplication.shared.canOpenURL(url) {
if #available(iOS 10, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}
}
}
}
}
использование
"+1-(800)-123-4567".makeAColl()
Образец для теста
func test() {
isPhone("blabla")
isPhone("+1(222)333-44-55")
isPhone("+42 555.123.4567")
isPhone("+1-(800)-123-4567")
isPhone("+7 555 1234567")
isPhone("+7(926)1234567")
isPhone("(926) 1234567")
isPhone("+79261234567")
isPhone("926 1234567")
isPhone("9261234567")
isPhone("1234567")
isPhone("123-4567")
isPhone("123-89-01")
isPhone("495 1234567")
isPhone("469 123 45 67")
isPhone("8 (926) 1234567")
isPhone("89261234567")
isPhone("926.123.4567")
isPhone("415-555-1234")
isPhone("650-555-2345")
isPhone("(416)555-3456")
isPhone("202 555 4567")
isPhone("4035555678")
isPhone(" 1 416 555 9292")
}
private func isPhone(_ string: String) {
let result = string.isValid(regex: .phone)
print("\(result ? "✅" : "❌") \(string) | \(string.onlyDigits()) | \(result ? "[a phone number]" : "[not a phone number]")")
}
Результат
В 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")
Надеюсь, это поможет.
Обновлено для Swift 3:
Ниже приведены простые строки кода, если вы хотите сделать телефонный звонок:
// определение функции:
func makeAPhoneCall() {
let url: NSURL = URL(string: "TEL://1234567890")! as NSURL
UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
}
// вызов функции: [используется в любом месте вашего кода]
self.makeAPhoneCall()
Примечание: пожалуйста, запустите приложение на реальном устройстве, потому что оно не будет работать на симуляторе.
По ошибке мой ответ был неуместен, пожалуйста, проверьте этот: Вы можете использовать это:
guard let url = URL(string: "tel://\(yourNumber)") else {
return //be safe
}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}
Нам нужно проверить, находимся ли мы на iOS 10 или более поздней версии. Поскольку openURL устарела в iOS 10.0
if let phoneCallURL:URL = URL(string: "tel:\(strPhoneNumber)") {
let application:UIApplication = UIApplication.shared
if (application.canOpenURL(phoneCallURL)) {
let alertController = UIAlertController(title: "MyApp", message: "Are you sure you want to call \n\(self.strPhoneNumber)?", preferredStyle: .alert)
let yesPressed = UIAlertAction(title: "Yes", style: .default, handler: { (action) in
application.openURL(phoneCallURL)
})
let noPressed = UIAlertAction(title: "No", style: .default, handler: { (action) in
})
alertController.addAction(yesPressed)
alertController.addAction(noPressed)
present(alertController, animated: true, completion: nil)
}
}