Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to dismiss CNContactViewController

I'm trying to let the user create a new contact. While I've got the screen to prompt the user to put in all his details there is no navigation bar at the top(Like there is in the default Apple Contacts app). There is no way to exit the scene. I'm using the ContactUI framework in swift 2.0 and Xcode 7.3. Here's the code:

// create a new contact
    let createNewActionHandler = {(action: UIAlertAction) -> Void in
        let newContact = CNMutableContact()

        let contactPicker = CNContactViewController(forNewContact: newContact)
        contactPicker.delegate = self
        contactPicker.navigationController?.setToolbarHidden(false, animated: false)
        self.presentViewController(contactPicker, animated: true, completion: nil)

    }

Here's what I'm trying to get: Apple Default

Here's what I have: What I have

I'm launching the new contact view controller from an action sheet in a tab view controller. I tried embedding the tab in a Navigation view controller but to no effect. I even tried setting the setToolbarHidden property of the navController but it didn't help.

Thanks for any help. I saw the issue raised in other forums but they didn't help.

like image 300
Ishan Saksena Avatar asked May 23 '16 11:05

Ishan Saksena


2 Answers

You have to embed contactViewController to UINavigationController and Implement Delegate Methods.

let createNewActionHandler = {(action: UIAlertAction) -> Void in
    let newContact = CNMutableContact()

    let contactPicker = CNContactViewController(forNewContact: newContact)
    contactPicker.delegate = self
    let navigation = UINavigationController(rootViewController: contactPicker)
    self.presentViewController(navigation, animated: true, completion: nil)

}


//MARK: - Delegate

  func contactViewController(viewController: CNContactViewController, didCompleteWithContact contact: CNContact?) {
      viewController.dismissViewControllerAnimated(true, completion: nil)
  }

  func contactViewController(viewController: CNContactViewController, shouldPerformDefaultActionForContactProperty property: CNContactProperty) -> Bool {
      return true
  }
like image 93
SPatel Avatar answered Nov 09 '22 15:11

SPatel


The view controllers must be embedded in UINavigationController and you should push or show view controller:

navigationController?.pushViewController(contactPicker, animated: true)

instead of presenting view controller

like image 5
binchik Avatar answered Nov 09 '22 14:11

binchik