Comment faire un appel téléphonique dans iOS 10 en utilisant Swift? [dupliquer]

cette question a déjà une réponse ici:

  • appel à un numéro de téléphone à swift 17 réponses

je veux que mon application puisse appeler un certain numéro quand un bouton est cliqué. J'ai essayé de le chercher sur google mais il ne semble pas y en avoir un pour iOS 10 jusqu'à présent (où openURL est parti). Quelqu'un peut mettre un exemple pour moi sur la façon de le faire? Par exemple comme:

@IBAction func callPoliceButton(_ sender: UIButton) {
    // Call the local Police department
}
42
demandé sur Vadim Kotov 2016-10-17 07:09:54

6 réponses

vous pouvez appeler comme ceci:

 if let url = URL(string: "tel://\(number)") {
                UIApplication.shared.openURL(url)
            }

pour Swift 3+ , vous pouvez utiliser comme

guard let number = URL(string: "tel://" + number) else { return }
UIApplication.shared.open(number)

OR

UIApplication.shared.open(number, options: [:], completionHandler: nil)

assurez-vous que vous avez effacé votre chaîne de numéros de téléphone pour supprimer toutes les instances de ( , ) , - , ou space .

98
répondu Parth Adroja 2018-04-11 09:06:37

tâche

passer un appel avec validation du numéro de téléphone

détails

Xcode 9.2, Swift 4

Solution

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("151900920")}
        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)
                }
            }
        }
    }
}

Utilisation

"+1-(800)-123-4567".makeAColl()

échantillon pour essai

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]")")
}

résultat

enter image description here

27
répondu Vasily Bodnarchuk 2018-02-19 16:19:24

mise à jour pour Swift 3:

utilisé sous des lignes de code simples, si vous voulez faire un appel téléphonique:

/ / defination de la fonction:

func makeAPhoneCall()  {
    let url: NSURL = URL(string: "TEL://1234567890")! as NSURL
    UIApplication.shared.open(url as URL, options: [:], completionHandler: nil)
}

/ / appel de fonction: [utilisé n'importe où dans votre code]

self.makeAPhoneCall()

Note: veuillez lancer l'application sur un véritable appareil parce qu'elle ne fonctionnera pas sur le simulateur.

10
répondu Kiran jadhav 2017-10-31 04:33:57
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)
        }
    }
4
répondu Pratik Patel 2017-02-22 05:50:53

Par erreur ma réponse a été déplacé, veuillez caisse un: Vous pouvez utiliser ceci:

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)
}

nous devons vérifier si nous sommes sur iOS 10 ou plus tard comme "openURL" a été déprécié dans iOS 10.0

2
répondu Anjali jariwala 2018-07-30 10:53:16

Dans 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 
   }
}

appelez ça comme ci-dessous

dialNumber(number: "+921111111222")

Espérons que cette aide.

0
répondu AbdulRehman Warraich 2018-10-04 10:33:41