Кнопка отмены CNContactViewController не работает

Я пытаюсь использовать встроенный новый контактный интерфейс и получаю неожиданное поведение с помощью кнопки отмены. Приведенный ниже код работает и вызывает новый экран контактов, но кнопка отмены удаляет только те записи экрана, которые не отменяются из нового экрана контактов. Во встроенном приложении контактов нажатие кнопки отмены возвращает к экрану списка контактов. Я хотел бы, чтобы кнопка отмены закрывала окно.

@IBAction func newTwo(sender: AnyObject) {
    AppDelegate.getAppDelegate().requestForAccess { (accessGranted) -> Void in
        if accessGranted {
            let npvc = CNContactViewController(forNewContact: nil)
            npvc.delegate = self
            self.navigationController?.pushViewController(npvc, animated: true)
         }
    }

}

3 ответа

Решение

Вы реализовали методы CNContactViewControllerDelegate? Вот ссылка на документацию

например:

 func contactViewController(viewController: CNContactViewController, didCompleteWithContact contact: CNContact?) {

    self.dismissViewControllerAnimated(true, completion: nil)
}

Это сработало для меня, используя следующий код:

Свифт 3

func contactViewController(_ vc: CNContactViewController, didCompleteWith con: CNContact?) {
    vc.dismiss(animated: true)
}

Также я изменил способ вызова контроллера:

Вместо:

self.navigationController?.pushViewController(contactViewController, animated: true)

решение было:

self.present(UINavigationController(rootViewController: contactViewController), animated:true)

Я нашел решение, используя пример кода Programming-iOS-Book-examples, написанный Мэттом Нойбургом:

Лучший способ сделать увольнение состоял бы в том, чтобы проверить, является ли контакт нулевым, и затем отклонить его. Отмена не работает, если вы вытолкнули контроллер представления из контроллера навигации. Возможно, вам придется сделать следующее:

func contactViewController(viewController: CNContactViewController, didCompleteWithContact contact: CNContact?) {
  if let contactCreated =  contact
  {

  }
  else
  {
    _ = self.navigationController?.popViewController(animated: true)
  }
}
Другие вопросы по тегам