iOS9通讯录框架Contacts的简单使用

来源:互联网 发布:网络电视哪种好 编辑:程序博客网 时间:2024/06/06 08:55

iOS9通讯录框架Contacts的简单使用

第一步,导入Contacts框架,import Contacts ,这个是不带UI的框架,可以直接获取联系人

// 检查状态        let status: CNAuthorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts)        switch status {        case .NotDetermined:            print("是否允许访问联系人,当应用第一次安装在设备上时将处于此状态")        case .Restricted:            print("不能够访问联系人数据,并且用户也不能在设置中改变这个状态")        case .Denied:            print("不允许应用访问联系人数据")        case .Authorized:            print("能够自由访问联系人")        }
第二步,如果没有获取授权就去获取

private func getAuth() {        CNContactStore().requestAccessForEntityType(CNEntityType.Contacts) { (status: Bool, error) in            if error != nil {                print("error = \(error)")            }            // 根据status的状态来判断是否授权成功            print("status = \(status)")        }    }

第三步、获取通讯录信息

// 获取通讯录信息    private func getContactMessage() {        let formatter = CNContactFormatter.descriptorForRequiredKeysForStyle(CNContactFormatterStyle.FullName)        // 这里的 Key 可以根据需要设置        let request = CNContactFetchRequest.init(keysToFetch: [formatter, CNContactIdentifierKey, CNContactPhoneNumbersKey, CNContactEmailAddressesKey, CNContactEmailAddressesKey, CNContactImageDataAvailableKey])                do {            try CNContactStore().enumerateContactsWithFetchRequest(request) {[weak self] (contact: CNContact, status:UnsafeMutablePointer<ObjCBool>) in                // 保存到数组                self!.dataSources.append(contact)            }        } catch let error {            print("获取信息 error = \(error)")        }    }
第四步、打印获取的信息

private func contactMessage() {        for contact in dataSources {            let number = contact.phoneNumbers            // 演示需要,只打印电话号码,这里是一个数组,可能不止一个号码            for obj in number {                let model = obj.value as! CNPhoneNumber                print("number = \(model.stringValue)")            }        }    }
下面介绍包含UI界面的通讯录框架ContactsUI,使用之前要导入import ContactsUI
        let contact = CNContactPickerViewController()        contact.delegate = self                // 设置要搜索的信息,可以不设置这个属性        contact.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactImageDataKey, CNContactPhoneNumbersKey]                // 设置某个搜索的条件,不符合条件的项不可选(搜索号码大于2条的)        let predicate = NSPredicate(format: "phoneNumbers.@count > 2", argumentArray: nil)        contact.predicateForEnablingContact = predicate                presentViewController(contact, animated: true, completion: nil)

        let contact = CNContactPickerViewController()        contact.delegate = self                // 设置要搜索的信息,可以不设置这个属性        contact.displayedPropertyKeys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactImageDataKey, CNContactPhoneNumbersKey]                // 搜索某个属性的条件        let predicateProperty = NSPredicate(format: "(key == 'emailAddresses') AND (value LIKE '*@qq.com')", argumentArray: nil)        contact.predicateForSelectionOfProperty = predicateProperty                presentViewController(contact, animated: true, completion: nil)

下面介绍CNContactPickerDelegate的代理方法

extension ViewController: CNContactPickerDelegate {    func contactPickerDidCancel(picker: CNContactPickerViewController) {        print("点击取消调用")    }        func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {        print("返回单个CNContact数据的时候调用 = \(contact)")    }        func contactPicker(picker: CNContactPickerViewController, didSelectContactProperty contactProperty: CNContactProperty) {        print("当搜索条件为 Property 即为属性 predicateForSelectionOfProperty 赋值并且返回的是单个数据的时候调用 = \(contactProperty)")    }        func contactPicker(picker: CNContactPickerViewController, didSelectContacts contacts: [CNContact]) {        print("返回一组[CNContact]数据的时候调用 = \(contacts)")    }        func contactPicker(picker: CNContactPickerViewController, didSelectContactProperties contactProperties: [CNContactProperty]) {        print("当搜索条件为 Property 即为属性 predicateForSelectionOfProperty 赋值并且返回的是一组数据的时候调用 = \(contactProperties)")    }}









0 0
原创粉丝点击