Настроить контроллер навигации 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)
}
}
}
Это сработало отлично. Я узнал, что для навигации по ячейке лучше всего использовать замыкания.