取消按钮对CNContactViewController

时间:2018-12-04 02:38:44

标签: ios swift contacts cncontact cncontactviewcontroller

这不是this questionthis question的重复,因为这些答案无效。

由于某些原因,当在UINavigationController中显示CNContactViewController时,取消按钮无效。

复制步骤:

  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 :(得分:1)

我现在已经尝试了您的代码;并取消按钮关闭视图控制器,没有问题。在我的情况下,问题在于显示视图控制器,该控制器通过将contactNavController的当前值更改为:

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

尝试一下,也许您遇到线程问题