2

这不是这个问题这个问题的欺骗,因为这些答案不起作用。

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()
    }
}
4

1 回答 1

2

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

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

试试看,也许你有线程问题

于 2018-12-04T05:10:26.587 回答