Кнопка Отмена не имеет никакого эффекта для CNContactViewController

Это не обман этого вопроса или этого вопроса, потому что эти ответы не сработали.

По какой-то причине кнопка отмены не действует при представлении CNContactViewController внутри UINavigationController.

Действия по воспроизведению:

  1. Скопируйте этот вид контроллера.
  2. Нажмите кнопку отмены.

Ожидаемое поведение:

CNContactViewController увольняется.

Фактическое поведение:

Ничего не произошло. Точки останова внутри функции делегата никогда не вызываются.

import Foundation
import Contacts
import ContactsUI


class ContactViewController: UIViewController, CNContactViewControllerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()

        createContact()
    }


    func createContact() {
        let contactController = CNContactViewController(forNewContact: nil)

        contactController.delegate = self
        contactController.allowsEditing = true
        contactController.allowsActions = true
        contactController.title = ""
        contactController.view.layoutIfNeeded()

        let contactNavController = UINavigationController(rootViewController: contactController)
        contactNavController.navigationBar.backgroundColor = UIColor.red

        present(contactNavController, animated:true)
    }


    // =============================================================================================================
    // MARK: CNContactViewControllerDelegate Functions
    // =============================================================================================================
    func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
        viewController.dismiss(animated: true, completion: nil)
        dismiss(animated: true, completion: nil)
        print("hi")
    }


    func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
        print("yo")
        return true
    }


    // =============================================================================================================
    // MARK: UIViewController Functions
    // =============================================================================================================
    override var prefersStatusBarHidden: Bool {
        return true
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

1 ответ

Я попробовал ваш код прямо сейчас; И кнопка отмены отклоняет вид контроллера без проблем. Проблема в моем случае заключалась в том, чтобы показать контроллер вида, который был исправлен путем изменения настоящего contactNavController чтобы:

DispatchQueue.main.async {
            self.present(contactNavController, animated:true)
        }

попробуй, может у тебя проблема с нитками

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