簡體   English   中英

如何將電話號碼返回給swift應用程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM