设置导航控制器将控制器视为CNContactViewController黑屏

时间:2017-07-31 14:03:20

标签: swift uinavigationcontroller cncontactviewcontroller

我有一个集合视图,其中一些单元格代表一个联系人(他们的数据有一个电话号码和名称),我正在尝试将联系人添加到iPhone联系人。我已经从名为&#34的按钮创建了一个segue;添加联系人"它位于导航控制器的CollectionViewCell内,并将其标识符设置为" ADD_CONTACT"。
在故事板中,我的segue有一个没有根视图控制器的导航控制器。 在视图控制器的prepareToSegue中委托我的UICollectionView我写了这段代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == ADD_CONTACT {
        let dest = segue.destination as! UINavigationController
        if let cell = sender as? SBInstructionCell {
            if cell.isContact {
                let newContact = CNMutableContact()

                if let phone = cell.instructionBean?.contactAttachment?.phoneNumber{
                    newContact.phoneNumbers.append(CNLabeledValue(label: "home", value: CNPhoneNumber(stringValue: phone)))
                }
                if let name = cell.instructionBean?.contactAttachment?.contactName {
                    newContact.givenName.append(name)
                }
                let contactVC = CNContactViewController(forNewContact: newContact)
                contactVC.contactStore = CNContactStore()
                contactVC.delegate = self
                dest.setViewControllers([contactVC], animated: false)

            }
        }
    }
}

这会导致黑屏。 怎么解决这个问题?我想看CNContactViewController

1 个答案:

答案 0 :(得分:1)

最终我使用Closures以不同的方法解决了这个问题。

在我的 var closureForContact: (()->())? = nil 中 我添加了这个var:

    @IBAction func addContactTapped(_ sender: UIButton) {
    if closureForContact != nil{
        closureForContact!()
    }
    }

现在我在按钮的同一个单元格中执行了这个功能:

CollectionView

调用该函数。

在索引路径中的项目的 cell.closureForContact = { if cell.isContact { let newContact = CNMutableContact() if let phone = cell.instructionBean?.contactAttachment?.phoneNumber{ newContact.phoneNumbers.append(CNLabeledValue(label: "home", value: CNPhoneNumber(stringValue: phone))) } if let name = cell.instructionBean?.contactAttachment?.contactName { newContact.givenName.append(name) } let contactVC = CNContactViewController(forNewContact: newContact) contactVC.contactStore = CNContactStore() contactVC.delegate = self contactVC.allowsEditing = true contactVC.allowsActions = true if let nav = self.navigationController { nav.navigationBar.isTranslucent = false nav.pushViewController(contactVC, animated: true) } } } 单元格中,我设置了这样的闭包:

{{1}}

这完美无缺。我了解到,从单元格导航时,最好使用闭包。