美文网首页
swift 通讯录

swift 通讯录

作者: 渣渣__ | 来源:发表于2016-05-25 15:43 被阅读609次
    
    class ViewController: UIViewController,ABPeoplePickerNavigationControllerDelegate {
    
        
        var nameLabel:UILabel?
       
        var go:UIButton?
        
        var second:UIButton?
        //
        var addressBook:ABAddressBookRef?
    
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            
            self.view.backgroundColor = UIColor.cyanColor()
            
            nameLabel = UILabel.init(frame: CGRectMake(50, 300, 275, 200))
            nameLabel?.backgroundColor = UIColor.redColor()
            nameLabel?.font = UIFont.init(name: "customFontName", size: 13)
            nameLabel?.numberOfLines = 0;
            self.view.addSubview(nameLabel!)
            
            go = UIButton.init(type:UIButtonType.Custom)
            go?.frame = CGRectMake(80, 150, 255, 50)
            go?.setTitle("get contactBook", forState: UIControlState.Normal)
            go?.titleLabel?.textAlignment = NSTextAlignment.Center
            go?.addTarget(self, action: #selector(getAllContactPeople), forControlEvents: UIControlEvents.TouchUpInside)
            self.view.addSubview(go!)
            
            second = UIButton.init(type:UIButtonType.Custom)
            second?.frame = CGRectMake(80, 50, 255, 50)
            second?.setTitle("通讯录", forState: UIControlState.Normal)
            second?.titleLabel?.textAlignment = NSTextAlignment.Center
            second?.addTarget(self, action: #selector(goToContactBook), forControlEvents: UIControlEvents.TouchUpInside)
            self.view.addSubview(second!)
    
            
            
            var error:Unmanaged<CFErrorRef>?
            addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
    
            
        }
    
        
        func goToContactBook(){
            let pickController = ABPeoplePickerNavigationController()
            pickController.peoplePickerDelegate = self;
            self.presentViewController(pickController, animated: true, completion: nil)
    
        }
        
        
        func getAllContactPeople() {
            
            
            //发出授权信息
            let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
            if (sysAddressBookStatus == ABAuthorizationStatus.NotDetermined) {
                print("requesting access...")
                var  errorRef:Unmanaged<CFError>? = nil
                
                ABAddressBookRequestAccessWithCompletion(addressBook, { (success, error) in
                    if success{
                        //获取通讯录
                        self.readRecords();
                        
                    }else{
                        print("error:\(error)")
                    }
                })
                
                
            }else if (sysAddressBookStatus == ABAuthorizationStatus.Denied || sysAddressBookStatus == ABAuthorizationStatus.Restricted){
                print("access denied")
            }else if (sysAddressBookStatus == ABAuthorizationStatus.Authorized){
                print("access granted")
                self.readRecords();
            }
            
            
            
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        
        func readRecords(){
            
            var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray
            
            for contact in sysContacts {
                
                //获取姓
                var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as! String?
                print("姓:\(lastName)")
                //获取名
                var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as! String?
                print("名:\(firstName)")
                //获取昵称
                var nickName = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as! String?
                print("昵称:\(nickName)")
                //获取公司(组织)
                var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as! String?
                print("公司(组织):\(organization)")
                //获取职位
                var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as! String?
                print("职位:\(jobTitle)")
                //获取部门
                var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as! String?
                print("部门:\(department)")
                //获取备注
                var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as! String?
                print("备注:\(note)")
                //获取电话
                var phoneValues:ABMutableMultiValueRef? = ABRecordCopyValue(contact, kABPersonPhoneProperty).takeRetainedValue()
                if phoneValues != nil {
                    print("电话: ")
                    for i in 0 ..< ABMultiValueGetCount(phoneValues){
                        
                        // 获得标签名
                        var phoneLabel = ABMultiValueCopyLabelAtIndex(phoneValues, i).takeRetainedValue()
                            as CFStringRef;
                        // 转为本地标签名(能看得懂的标签名,比如work、home)
                        var localizedPhoneLabel = ABAddressBookCopyLocalizedLabel(phoneLabel)
                            .takeRetainedValue() as! String
                        
                        var value = ABMultiValueCopyValueAtIndex(phoneValues, i)
                        var phone = value.takeRetainedValue() as! String
                        print("\(localizedPhoneLabel):\(phone)")
                    }
                }
                //获取Email
                var emailValues:ABMutableMultiValueRef? =
                    ABRecordCopyValue(contact, kABPersonEmailProperty).takeRetainedValue()
                if emailValues != nil {
                    print("Email:")
                    for i in 0 ..< ABMultiValueGetCount(emailValues){
                        
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                        
                        var value = ABMultiValueCopyValueAtIndex(emailValues, i)
                        var email = value.takeRetainedValue() as! String
                        print("  \(localizedLabel):\(email)")
                    }
                }
                
                //获取地址
                var addressValues:ABMutableMultiValueRef? =
                    ABRecordCopyValue(contact, kABPersonAddressProperty).takeRetainedValue()
                if addressValues != nil {
                    print("地址:")
                    for i in 0 ..< ABMultiValueGetCount(addressValues){
                        
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(addressValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                        
                        var value = ABMultiValueCopyValueAtIndex(addressValues, i)
                        var addrNSDict:NSMutableDictionary = value.takeRetainedValue()
                            as! NSMutableDictionary
                        var country:String = addrNSDict.valueForKey(kABPersonAddressCountryKey as String)
                            as? String ?? ""
                        var state:String = addrNSDict.valueForKey(kABPersonAddressStateKey as String)
                            as? String ?? ""
                        var city:String = addrNSDict.valueForKey(kABPersonAddressCityKey as String)
                            as? String ?? ""
                        var street:String = addrNSDict.valueForKey(kABPersonAddressStreetKey as String)
                            as? String ?? ""
                        var contryCode:String = addrNSDict
                            .valueForKey(kABPersonAddressCountryCodeKey as String) as? String ?? ""
                        print("  \(localizedLabel): Contry:\(country) State:\(state) ")
                        print("City:\(city) Street:\(street) ContryCode:\(contryCode) ")
                    }
                }
                
                //获取纪念日
                var dateValues:ABMutableMultiValueRef? =
                    ABRecordCopyValue(contact, kABPersonDateProperty).takeRetainedValue()
                if dateValues != nil {
                    print("纪念日:")
                    for i in 0 ..< ABMultiValueGetCount(dateValues){
                        
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                        
                        var value = ABMultiValueCopyValueAtIndex(dateValues, i)
                        var date = (value.takeRetainedValue() as? NSDate)?.description ?? ""
                        print("  \(localizedLabel):\(date)")
                    }
                }
                
                //获取即时通讯(IM)
                var imValues:ABMutableMultiValueRef? =
                    ABRecordCopyValue(contact, kABPersonInstantMessageProperty).takeRetainedValue()
                if imValues != nil {
                    print("即时通讯(IM):")
                    for i in 0 ..< ABMultiValueGetCount(imValues){
                        
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(imValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                        
                        var value = ABMultiValueCopyValueAtIndex(imValues, i)
                        var imNSDict:NSMutableDictionary = value.takeRetainedValue()
                            as! NSMutableDictionary
                        var serves:String = imNSDict
                            .valueForKey(kABPersonInstantMessageServiceKey as String) as? String ?? ""
                        var userName:String = imNSDict
                            .valueForKey(kABPersonInstantMessageUsernameKey as String) as? String ?? ""
                        print("  \(localizedLabel): Serves:\(serves) UserName:\(userName)")
                    }
                }
                
                
                
                print("================================================")
                
            }
            
            
        }
        
        
        
        
        
        
        
        
        //点击选中
        
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord) {
            
            
            self.dismissViewControllerAnimated(true) {
                print("====================")
                
                let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)?.takeRetainedValue() as! String?
                
                print(lastName)
                
                print("====================")
            }
            
            
        }
        
        
        //
        
        func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController, didSelectPerson person: ABRecord, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
            
            
            
        }
        
        
        // 取消
        
        func peoplePickerNavigationControllerDidCancel(peoplePicker: ABPeoplePickerNavigationController) {
            
        }
        
    }```

    相关文章

      网友评论

          本文标题:swift 通讯录

          本文链接:https://www.haomeiwen.com/subject/emltdttx.html