最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[未解决]修改或扩展CNContactPickerViewController中的显示出来的单行的联系人显示形式

Swift crifan 4196浏览 0评论

已经通过实现:

[已解决]尝试用CNContactPickerViewController去绕开权限bug而直接访问通讯录

现在想要修改或扩展CNContactPickerViewController,想办法实现,类似这种效果:

单行联系人,除了名字之外,要带上:

头像和按钮

CNContactViewController Class Reference

CNContactPickerViewController Class Reference

swift CNContactPickerViewController custom cell

swift CNContactPickerViewController customize

另外,发现:

点击某个联系人后,进入的页面是:

看起来是,使用了:

CNContactViewController

那么就是:

干脆放弃,因为没找到办法,去修改CNContactPickerViewController中的每一行

只能想办法:

去看看,点击CNContactPickerViewController中某个联系人之后,进入的单个联系人的显示的界面中,是否可以添加额外的按钮。

结果才发现,此处的点击进入单个联系人的显示界面中,不是

CNContactViewController

而还是CNContactPickerViewController自己内部的子页面

然后在该页面中,点击了其中的内容,比如电话号码:

会调用到delegate的didSelectContactProperty方法

-》之前点击单个联系人,则是调用了delegate的didSelectContact

参考:

iOS9系列专题五——全新的联系人与联系人UI框架 – 珲少的个人空间 – 开源中国社区

或许可以通过:

继承CNContactViewController

而添加额外的按钮?

去试试:

[未解决]CNContactViewController出错:CNPropertyNotFetchedException Contact is missing some of the required key descriptors

不管上述问题了。自己自定义一个View去显示。暂时调试期间的得到的输出是:

    @available(iOS 9.0, *)
    func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact){
        print("didSelectContact")
        print("contact=\(contact)")
        /*
        contact=<CNContact: 0x7d2e9f50: identifier=C3068F9C-6315-4345-A069-21487A740078:ABPerson, givenName=炳恋, familyName=, organizationName=简道, phoneNumbers=(
        "<CNLabeledValue: 0x7d84f0d0: identifier=7D509001-2CDF-4316-BB9F-C1E21420728A, label=_$!<Mobile>!$_, value=<CNPhoneNumber: 0x7d216140: countryCode=us, digits=+8613862050544>>"
        ), emailAddresses=(
        ), postalAddresses=(not fetched)>
        */
        print("contact.familyName=\(contact.familyName)") //contact.familyName=
        print("contact.givenName=\(contact.givenName)") //contact.givenName=炳恋
        print("contact.phoneNumbers=\(contact.phoneNumbers)")
        //contact.phoneNumbers=[<CNLabeledValue: 0x7877da60: identifier=7D509001-2CDF-4316-BB9F-C1E21420728A, label=_$!<Mobile>!$_, value=<CNPhoneNumber: 0x78724150: countryCode=us, digits=+8613862050544>>]
        for eachPhoneNumberLabelValue in contact.phoneNumbers{
            print("eachPhoneNumberLabelValue.label=\(eachPhoneNumberLabelValue.label)")
            //eachPhoneNumberLabelValue.label=_$!<Mobile>!$_
            print("eachPhoneNumberLabelValue.label.jsonKey=\(eachPhoneNumberLabelValue.label.jsonKey)")
            //eachPhoneNumberLabelValue.label.jsonKey=Key("_$!<Mobile>!$_")
            print("eachPhoneNumberLabelValue.value=\(eachPhoneNumberLabelValue.value)")
            let phoneNumber:CNPhoneNumber = eachPhoneNumberLabelValue.value as! CNPhoneNumber
            print("phoneNumber=\(phoneNumber)") //phoneNumber=<CNPhoneNumber: 0x7be9e730: countryCode=us, digits=+8613862050544>
            print("phoneNumber.stringValue=\(phoneNumber.stringValue)") //phoneNumber.stringValue=+86 138-6205-0544
            print("phoneNumber.valueForKey(\"digits\")=\(phoneNumber.valueForKey("digits"))")
            //phoneNumber.valueForKey("digits")=Optional(+8613862050544)
        }
        print("contact.organizationName=\(contact.organizationName)")
//        let contactVC:CNContactViewController = CNContactViewController(forContact: contact)
////        let contactVC:CNContactViewController = CNContactViewController(forUnknownContact: contact)
//        self.showViewController(contactVC, sender: self) 
    }

转载请注明:在路上 » [未解决]修改或扩展CNContactPickerViewController中的显示出来的单行的联系人显示形式

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
91 queries in 0.334 seconds, using 22.09MB memory