【发布时间】:2018-12-04 02:38:44
【问题描述】:
这不是 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()
}
}
【问题讨论】:
-
您是否尝试直接展示
CNContactViewController,而不是将其放入导航控制器? -
@rmaddy 是的。如果你这样做,视图控制器甚至不可见。显然是一些错误。感谢您的回复!
-
@SPatel 您好,这些解决方案也已尝试过。它不是重复的。将更新问题以反映这一点。谢谢!
-
对我来说,您的代码运行良好。在模拟器中我已经测试过了。我可以使用红色导航栏中的取消按钮将其关闭。我更改的是在视图 didload 上添加延迟,然后调用 createContact func
标签: ios swift contacts cncontact cncontactviewcontroller