我在我的应用程序中使用Peek和Pop显示CNContactViewController
,它看起来没问题,但没有任何操作正在运行。
这是我的代码。创建视图控制器:
func previewViewController() -> CNContactViewController {
let contactVC = CNContactViewController(for: theContact)
contactVC.allowsEditing = false
contactVC.allowsActions = true
contactVC.delegate = defaultContactVCDelegate
return contactVC
}
实施UIViewControllerPreviewingDelegate
:
extension MyViewController: UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
viewControllerForLocation location: CGPoint) -> UIViewController? {
let preview = previewViewController()
let wrapper = UINavigationController(rootViewController: preview)
return wrapper
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
commit viewControllerToCommit: UIViewController)
{
guard let wrapper = viewControllerToCommit as? UINavigationController else { return }
guard let preview = wrapper.viewControllers.first else { return }
navigationController?.pushViewController(preview, animated: false)
}
}
CNContactViewControllerDelegate
:
class DefaultContactViewControllerDelegate: NSObject, CNContactViewControllerDelegate {
func contactViewController(_ viewController: CNContactViewController,
shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
return true
}
}
我想如果这些动作出现在屏幕上(我的意思是底部动作和顶部圆圈),它们应该是可触摸的。但是当我触摸它们时,没有任何反应,就好像用户交互被禁用一样。
答案 0 :(得分:0)
嗯,正如经常发生的那样,在我收到答案之前,解决方案就出现了。
问题是在CNContactViewController
方法预览后previewingContext(,viewControllerForLocation)
以某种方式被破坏了。
因此,我只为相同的CNContact
创建并显示新的控制器,而不是使用viewControllerToCommit
。
这是我的工作代码:
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
commit viewControllerToCommit: UIViewController)
{
let preview = previewViewController()
navigationController?.pushViewController(preview, animated: false)
}