这不是this question或this question的重复,因为这些答案无效。
由于某些原因,当在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()
}
}
答案 0 :(得分:1)
我现在已经尝试了您的代码;并取消按钮关闭视图控制器,没有问题。在我的情况下,问题在于显示视图控制器,该控制器通过将contactNavController
的当前值更改为:
DispatchQueue.main.async {
self.present(contactNavController, animated:true)
}
尝试一下,也许您遇到线程问题