2017-05-15 1 views
0

Je montre CNContactViewController dans mon application en utilisant Peek et Pop, ça semble bien, mais aucune des actions ne fonctionne.CNContactViewController ne peut pas appeler ou envoyer un message (montrer en utilisant Peek et Pop ou UIViewControllerPreviewingDelegate)

Voici mon code. Création du contrôleur de vue:

func previewViewController() -> CNContactViewController { 
    let contactVC = CNContactViewController(for: theContact) 
    contactVC.allowsEditing = false 
    contactVC.allowsActions = true 
    contactVC.delegate = defaultContactVCDelegate 
    return contactVC 
} 

Mise en œuvre du 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) 
    } 
} 

Le CNContactViewControllerDelegate:

class DefaultContactViewControllerDelegate: NSObject, CNContactViewControllerDelegate { 
    func contactViewController(_ viewController: CNContactViewController, 
         shouldPerformDefaultActionFor property: CNContactProperty) -> Bool { 
     return true 
    } 
} 

Je suppose que si ces actions sont présentes à l'écran (je veux dire des actions bas et le haut cercles), ils sont censés être touchables. Mais quand je les touche, rien ne se passe, comme si l'interaction de l'utilisateur était désactivée.

Répondre

0

Eh bien, comme cela arrive souvent, la solution m'est venue avant que je reçoive une réponse.

Le problème était que CNContactViewController était en quelque sorte cassé après l'aperçu dans la méthode previewingContext(,viewControllerForLocation).

Donc je viens de créer et montrer un nouveau contrôleur pour le même CNContact au lieu d'utiliser viewControllerToCommit.

Voici mon codepiece de travail:

func previewingContext(_ previewingContext: UIViewControllerPreviewing, 
       commit viewControllerToCommit: UIViewController) 
{ 
    let preview = previewViewController() 
    navigationController?.pushViewController(preview, animated: false) 
}