Настроить контроллер навигации View Controller как черный экран CNContactViewController

У меня есть представление коллекции с некоторыми ячейками, представляющими контакт (их данные имеют номер телефона и имя), и я пытаюсь добавить контакт в контакты iPhone. Я создал переход с помощью кнопки "Добавить контакт", которая находится внутри 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 ответ

Решение

В конце концов я решил эту проблему другим способом, используя Closures.

В моем UICollectionViewCellЯ добавил этот вар:

    var closureForContact: (()->())? = nil

Теперь на действия моей кнопки в той же ячейке у меня есть эта функция:

    @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)
                            }
                        }
                    }

Это сработало отлично. Я узнал, что для навигации по ячейке лучше всего использовать замыкания.

Другие вопросы по тегам