2016-12-06 3 views
1

У меня есть база данных, в которой сохранены телефонные номера (как стационарные, так и мобильные или оба). В зависимости от выборки записей, если пользователь хочет позвонить по номеру, а в записи есть номера, мобильные и стационарные, как предоставить пользователю возможность выбрать номер.Swift 3: Как дать возможность выбрать номер телефона для звонка

@IBAction func makeCall(_ sender: Any) { 
    print ("------Phone Number-----") 
    print(landline) 
    print(phoneNumber) 

    let phone = "tel://"; 
    let lline = landline 
    let url:NSURL = NSURL(string:phone+phoneNumber)! 
    let url2:NSURL = NSURL(string: phone+landline)! 
    UIApplication.shared.openURL(url as URL) 
    UIApplication.shared.openURL(url2 as URL) 
} 

Используя приведенный выше код, он набирает оба номера, но хочет дать пользователю выбрать один из них.

+0

есть ли смысл с помощью UIAlertController для предоставления пользователю выбор, какой номер позвонить? – weissja19

+0

@ weissja19 нет нет пункт. Как мы можем использовать ALertController? –

ответ

2

Как и добавить для ответа weissja19, вы должны добавить проверку canopenurl перед вызовом самого вызова openurl. Также аккуратно, если пользователь не видит действия, которые он не может выполнить. Я бы рекомендовал вам использовать такой код.

@IBAction func makeCall(_ sender: Any) { 
    print ("------Phone Number-----") 
    print(landline) 
    print(phoneNumber) 

    let phone = "tel://"; 
    let lline = landline 
    let url:NSURL = NSURL(string:phone+phoneNumber)! 
    let url2:NSURL = NSURL(string: phone+landline)! 

    let alert = UIAlertController(title: 'Choose a number to call', message: 'Please choose which number you want to call', preferredStyle: .alert) 
    if UIApplication.shared.canOpenUrl(url as URL) { 
     let firstNumberAction = UIAlertAction(title: "Number 1", style: .default, handler: { _in 
      UIApplication.shared.openURL(url as URL) 
     }) 
     alert.addAction(firstNumberAction) 
    } 

    if UIApplication.shared.canOpenUrl(url2 as URL) { 
     let secondNumberAction = UIAlertAction(title: "Number 2", style: .default, handler: { _in 
      UIApplication.shared.openURL(url2 as URL) 
     }) 
     alert.addAction(secondNumberAction) 
    }  
    if alert.actions.count == 0 { 
     alert.title = "No numbers to call" 
     alert.message = "" 
     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 
    } else { 
     alert.addAction(UIAlertAction(title: "Cancel", style: .destructive, handler: nil)) 
    } 
    self.presentViewController(alert, animated: true, completion: nil) 
} 
+1

В swift 3 используйте собственный 'URL' вместо строки 'NSURL'. –

0

Вы можете использовать UIAlertController для предоставления пользователю выбор:

@IBAction func makeCall(_ sender: Any) { 
    print ("------Phone Number-----") 
    print(landline) 
    print(phoneNumber) 

    let phone = "tel://"; 
    let lline = landline 
    let url:NSURL = NSURL(string:phone+phoneNumber)! 
    let url2:NSURL = NSURL(string: phone+landline)! 

    let alert = UIAlertController(title: "Choose a number to call", message: "Please choose which number you want to call", preferredStyle: .alert) 

    let firstNumberAction = UIAlertAction(title: "Number 1", style: .default) { (action) in 
    UIApplication.shared.openURL(url as URL) 
    } 

    let secondNumberAction = UIAlertAction(title: "Number 2", style: .default) { (action) in 
    UIApplication.shared.openURL(url2 as URL) 
    }  

    alert.addAction(firstNumberAction) 
    alert.addAction(secondNumberAction) 
    self.present(alert, animated: true) 
} 

Конечно, вы можете также добавить отменить действие, если вам нравится.

+0

Спасибо. Но с некоторыми ошибками в ** {_in UIApplication.shared.openURL (URL-адрес URL) ** и при ** {_in UIApplication.shared.openURL (url2 как URL) ** –

+0

говорит, не может преобразовать значение типа '() ->() 'до ожидаемого типа аргумента' ((UIAlertAction) -> Void)? ' –

+0

Мой плохой. Сожалею. Теперь он должен работать – weissja19

0

Оба эти кода работают. Ниже приведен рабочий код

@IBAction func makeCall(_ sender: Any) { 
    print ("------Phone Number-----") 
    print(landline) 
    print(phoneNumber) 

    let phone = "tel://"; 
    let prefix = "03" 
    let url:NSURL = NSURL(string:phone+phoneNumber)! 
    let url2:NSURL = NSURL(string: phone+prefix+landline)! 

    let alert = UIAlertController(title: "Choose a number to call", message: "Please choose which number you want to call", preferredStyle: .alert) 
    if UIApplication.shared.canOpenURL(url as URL) { 
     let firstNumberAction = UIAlertAction(title: "Mobile: " + phoneNumber, style: .default) { (action) in 
      UIApplication.shared.openURL(url as URL) 
     } 
     alert.addAction(firstNumberAction) 
    } 


    if UIApplication.shared.canOpenURL(url2 as URL) { 
     let secondNumberAction = UIAlertAction(title: "Landline: " + prefix+landline , style: .default) { (action) in 
      UIApplication.shared.openURL(url2 as URL) 
     } 
     alert.addAction(secondNumberAction) 
    } 
    if alert.actions.count == 0 { 
     alert.title = "No numbers to call" 
     alert.message = "" 
     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 
    } else { 
     alert.addAction(UIAlertAction(title: "Cancel", style: .destructive, handler: nil)) 
    } 
    self.present(alert, animated: true, completion: nil) 
} 

спасибо много, чтобы weissja19 и Бен Ong

+0

' if let url = URL (строка: телефон + номер телефона), url2 = URL (строка: телефон + префикс + стационарный) {UIApplication.shared.open (url)} ' –

Смежные вопросы