【问题标题】:Cancel button has no effect for CNContactViewController取消按钮对 CNContactViewController 无效
【发布时间】:2018-12-04 02:38:44
【问题描述】:

这不是 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()
    }
}

【问题讨论】:

  • 您是否尝试直接展示CNContactViewController,而不是将其放入导航控制器?
  • @rmaddy 是的。如果你这样做,视图控制器甚至不可见。显然是一些错误。感谢您的回复!
  • @SPatel 您好,这些解决方案也已尝试过。它不是重复的。将更新问题以反映这一点。谢谢!
  • 对我来说,您的代码运行良好。在模拟器中我已经测试过了。我可以使用红色导航栏中的取消按钮将其关闭。我更改的是在视图 didload 上添加延迟,然后调用 createContact func

标签: ios swift contacts cncontact cncontactviewcontroller


【解决方案1】:

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

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

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

【讨论】:

  • 模拟器,目前我的xcode版本不支持我的手机版本测试
  • 嗯,不在设备上工作,将尝试模拟器。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2016-09-20
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多