Кнопка отмены 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)
}
}