Кнопка Отмена не имеет никакого эффекта для CNContactViewController - PullRequest
0 голосов
/ 04 декабря 2018

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

По какой-то причине кнопка отмены не действуетпри представлении 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 Ответ

0 голосов
/ 04 декабря 2018

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

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

, попробуйте, может быть, у вас проблема с потоком

...