[ios] 신속하게 전화 걸기

특정 번호를 사용하지 않고 변수로 호출되는 번호로 전화를 걸거나 적어도 전화기에서 번호를 가져 오라고 말하려고합니다. 변수에서 호출되는이 숫자는 파서를 사용하거나 웹 사이트 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)!)

        }



답변

단지 시도:

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

전화 번호가 busPhone.

NSURLinit(string:)너무 사용하여, 선택 사양 반환을 if let우리가 확인 urlA는 NSURL(이 아닌 NSURL?의해 반환을 init).


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에서 더 이상 사용되지 않습니다.


답변

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")하여 전화를 걸 수 있어야합니다 .


답변

스위프트 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)
        }
    }
}


답변

좋아, 도움을 받아 알아 냈어. 또한 전화 번호가 유효하지 않은 경우를 대비하여 멋진 작은 경고 시스템을 설치했습니다. 내 문제는 내가 올바르게 부르고 있었지만 번호에 공백과 ( “123456-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)
            }
        }
  }