首页 文章

快速拨打电话号码

提问于
浏览
56

我正在尝试拨打一个不使用特定号码的号码,而是拨打变量中的号码,或者至少告诉它拨打手机中的号码 . 在变量中调用的这个数字是我使用解析器或从网站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)!)

        }

18 回答

  • 0

    试一试:

    if let url = NSURL(string: "tel://\(busPhone)") where UIApplication.sharedApplication().canOpenURL(url) {
      UIApplication.sharedApplication().openURL(url)
    }
    

    假设电话号码在 busPhone .

    NSURLinit(string:) 返回一个Optional,所以通过使用 if let ,我们确保 urlNSURL (而不是 init 返回的 NSURL? ) .


    For Swift 3:

    if let url = URL(string: "tel://\(busPhone)"), UIApplication.shared.canOpenURL(url) {
        if #available(iOS 10, *) {
            UIApplication.shared.open(url)
        } else {
            UIApplication.shared.openURL(url)
        }
    }
    

    我们需要检查我们是否在iOS 10或更高版本上,因为:

    'openURL'在iOS 10.0中已弃用

  • 0

    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") 拨打电话 .

  • 58

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

    好的,我得到了帮助并想出来了 . 此外,我还放了一个漂亮的小警报系统,万一电话号码无效 . 我的问题是我说它是正确的,但数字有空格和不需要的字符,如(“123 456-7890”) . 如果您的号码是(“1234567890”),则UIApplication仅适用或接受 . 因此,您基本上通过创建一个新变量来仅删除数字来删除空格和无效字符 . 然后使用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()
            }
            }
    
  • 3

    以上答案部分正确,但“tel://”只有一个问题 . 通话结束后,它将返回主屏幕,而不是我们的应用程序 . 所以最好使用“telprompt://”,它将返回到应用程序 .

    var url:NSURL = NSURL(string: "telprompt://1234567891")!
    UIApplication.sharedApplication().openURL(url)
    
  • 0

    我在我的应用程序中使用此方法,它工作正常 . 我希望这对你也有帮助 .

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

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

    在Swift 3中,

    if let url = URL(string:"tel://\(phoneNumber)"), UIApplication.shared.canOpenURL(url) {
         UIApplication.shared.openURL(url)
    }
    
  • 1

    这是使用Swift 2.0更新@ Tom的答案注 - 这是我正在使用的整个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
     }
    }
    
  • 8

    我正在使用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)")!)
        }
    
  • 145

    openURL()已在iOS 10中弃用 . 以下是新语法:

    if let url = URL(string: "tel://\(busPhone)") {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
    
  • 3

    For 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.")
    }
    
  • 6

    斯威夫特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)
    
                }
            }
        }
    }
    
  • 8

    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)
    
  • 6

    这是使用 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
    
  • 1

    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

  • 10

    对于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)
       }
    }
    
  • 0

    如果您的电话号码包含空格,请先将其删除!然后你可以使用accepted answer's解决方案 .

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

相关问题