Как использовать CNContactViewController только для создания новых контактов? (Свифт)

У меня есть приложение для добавления контактов. Для этого я хочу использовать CNContactViewController(forNewContact: nil) из инфраструктуры ContactsUI.

Мой подход к достижению этого заключается в следующем

class myClass: UITableViewController, CNContactViewControllerDelegate {
    // ...
    @objc fileprivate func addTapped() {
        print("add tapped")

        let createContactcontroller = CNContactViewController(forNewContact: nil)
        controller.delegate = self

        navigationController?.pushViewController(controller, animated: true)
    }

    func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
        // Service.shared.addContact(contact: contact)
    }

}

Но есть несколько проблем, которые я не могу решить:

  1. Анимация выглядит медленной.
  2. Когда пользователь завершает создание контакта и щелкает мышью, отображается CNContactViewController для профиля (как в приложении контактов), а не просто возвращается в tableViewController. Как я могу это изменить?

  1. Я получаю следующие ошибки:

2019-11-16 10:29:48.480636+0100 Flashback[11688:541742] [Снимок] Для создания моментального снимка представления (0x7fc76481a420, _UIButtonBarStackView), которое не было визуализировано хотя бы один раз, требуется afterScreenUpdates: ДА. 2019-11-16 10:29:48.482425+0100 Flashback[11688:541742] [Снимок] Для создания снимка представления (0x7fc76481d020, _UIButtonBarStackView), которое не было обработано хотя бы один раз, требуется afterScreenUpdates: ДА. 2019-11-16 10:29:48.484897+0100 Flashback[11688:541742] [Снимок] Для создания снимка представления (0x7fc76481d5c0, _UIButtonBarStackView), которое не отображалось хотя бы один раз, требуется afterScreenUpdates: ДА. 2019-11-16 10:29:48.488071+0100 Flashback[11688:541742] [Снимок] Для создания моментального снимка представления (0x7fc76481d9f0, _UIButtonBarStackView), которое не отображалось хотя бы один раз, требуется afterScreenUpdates: ДА. 2019-11-16 10:29:48.489883+0100 Flashback[11688:541742] [Снимок] Для создания моментального снимка представления (0x7fc7626228e0, _UIButtonBarStackView), которое не было обработано хотя бы один раз, требуется afterScreenUpdates: ДА. 2019-11-16 10:29:48.491904+0100 Flashback[11688:541742] [Снимок] Для создания снимка представления (0x7fc7626102d0, _UIButtonBarStackView), которое не отображалось хотя бы один раз, требуется afterScreenUpdates: ДА.

1 ответ

Решение

Вы неправильно используете этот контроллер представления.

Вы не должны помещать его в существующий контроллер представления. Вместо этого вы создаете экземпляр UINavigationController с CNContactViewController в качестве корневого контроллера представления и представляете контроллер навигации как представленный контроллер представления. Затем вы должны сами отклонить представленный контроллер навигации в своей реализацииcontactViewController(_:didCompleteWith:).

Также обратите внимание на эту ошибку, которая делает этот контроллер представления в значительной степени непригодным для использования:

Лист действий с наложением клавиатуры в iOS 13.1 на CNContactViewController

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