[英]How to return a phone number to swift app?
我想讓我的用戶為他們的聯系人中的某人選擇一個電話號碼,然后將該號碼返回給應用程序,以便以后使用。 這是我的代碼,用於允許用戶選擇其聯系人電話號碼之一,但是當我單擊一個電話號碼時,它將呼叫該號碼(我不希望發生),並且不會向我的應用返回任何內容。
class ViewController: UIViewController {
var people = ABPeoplePickerNavigationController()
var addressBook: ABAddressBookRef?
func extractABAddressBookRef(abRef: Unmanaged<ABAddressBookRef>!) -> ABAddressBookRef? {
if let ab = abRef {
self.view.addSubview(people.view)
return Unmanaged<NSObject>.fromOpaque(ab.toOpaque()).takeUnretainedValue()
}
return nil
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecordRef!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
let multiValue: ABMultiValueRef = ABRecordCopyValue(person, property).takeRetainedValue()
let index = ABMultiValueGetIndexForIdentifier(multiValue, identifier)
let phoneNumber = ABMultiValueCopyValueAtIndex(multiValue, index).takeRetainedValue() as! String
println(phoneNumber)
}
我已經實現了一個解決方案,該解決方案僅顯示具有電話號碼的聯系人,並且用戶必須選擇一個具體的電話號碼。 您的ViewController必須實現ABPeoplePickerNavigationControllerDelegate
協議。
這是我的代碼:
func checkAuthorization ()
{
switch (ABAddressBookGetAuthorizationStatus())
{
case .NotDetermined:
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue(),
{ (granted: Bool, error: CFError!) -> Void in
if (granted)
{
// Access granted, show picker
self.showPeoplePicker();
}
else
{
// Custom func to show an alert
self.showAlertForContactPermission();
}
})
break;
case .Restricted, .Denied:
// Custom func to show an alert
showAlertForContactPermission();
break;
case .Authorized:
// Access granted, show picker
showPeoplePicker();
break;
}
}
func showPeoplePicker ()
{
// Create picker
let peoplePicker: ABPeoplePickerNavigationController = ABPeoplePickerNavigationController();
peoplePicker.peoplePickerDelegate = self;
// Show only contacts that have phone number
peoplePicker.displayedProperties = [NSNumber(int: kABPersonPhoneProperty)];
peoplePicker.predicateForEnablingPerson = NSPredicate(format: "phoneNumbers.@count > 0", argumentArray: nil);
// User has to select explicity phone number
peoplePicker.predicateForSelectionOfProperty = NSPredicate(format: "key == 'phoneNumbers'", argumentArray: nil);
// Present picker
presentViewController(peoplePicker, animated: true, completion: nil);
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier)
{
// Get name
let name: String = ABRecordCopyCompositeName(person).takeRetainedValue() as String;
// Get phone number selected
let multiValuePhones: ABMultiValueRef = ABRecordCopyValue(person, property).takeRetainedValue();
let selectedIndex: CFIndex = ABMultiValueGetIndexForIdentifier(multiValuePhones, identifier);
let selectedPhone: String = ABMultiValueCopyValueAtIndex(multiValuePhones, selectedIndex).takeRetainedValue() as! String;
// Get only digits
let digitsArray: [String] = selectedPhone.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet);
let phoneDigits: String = digitsArray.joinWithSeparator("");
// Pass info to your func
saveNewEmployee(name, phoneNumber: phoneDigits);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.