Ios 取消按钮对CNContactViewController无效

Ios 取消按钮对CNContactViewController无效,ios,swift,contacts,cncontact,cncontactviewcontroller,Ios,Swift,Contacts,Cncontact,Cncontactviewcontroller,这并不是因为这些答案不起作用而被愚弄 由于某些原因,在UINavigationController中显示CNContactViewController时,取消按钮无效 复制步骤: 复制此视图控制器 点击取消按钮 预期行为: CNContactViewController被解除 实际行为: 什么也没发生。委托函数内的断点永远不会被调用 import Foundation import Contacts import ContactsUI class ContactViewController:

这并不是因为这些答案不起作用而被愚弄

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

复制步骤:

  • 复制此视图控制器
  • 点击取消按钮
  • 预期行为:

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

    我已经试过你的代码了;“取消”按钮可以毫无问题地关闭视图控制器。在我的案例中,问题是关于显示视图控制器,通过将
    contactNavController
    的显示更改为:

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

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

    你有没有试着直接展示
    CNContactViewController
    而不是把它放在导航控制器中?@rmaddy是的。如果执行此操作,视图控制器甚至不可见。很明显是个虫子。谢谢你的回复!可能重复@SPatel hi,也尝试了这些解决方案。这不是复制品。将更新问题以反映这一点。谢谢对我来说,你的代码运行良好。在模拟器中,我进行了测试。我可以用红色导航栏上的“取消”按钮取消它。我改变的是增加了查看didload的延迟,然后调用createContact funcSimulator,目前我的xcode版本不支持我的手机版本来测试ithmmm,不在设备上工作,将尝试模拟器。谢谢