无法解雇CNContactViewController

时间:2016-05-23 11:58:17

标签: ios swift uiviewcontroller uinavigationcontroller uinavigationbar

我试图让用户创建一个新联系人。虽然我已经让屏幕提示用户输入他的所有细节,但顶部没有导航栏(就像默认的Apple Contacts应用程序中一样)。没有办法退出现场。我在swift 2.0和Xcode 7.3中使用了ContactUI框架。这是代码:

// 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)

    }

这是我想要获得的: Apple Default

这是我的所作所为: What I have

我从标签视图控制器中的操作表启动新的联系人视图控制器。我尝试在导航视图控制器中嵌入选项卡,但没有效果。我甚至尝试设置navController的setToolbarHidden属性,但它没有帮助。

感谢您的帮助。我在其他论坛上看到了这个问题,但他们没有帮助。

3 个答案:

答案 0 :(得分:11)

您必须将contactViewController嵌入到UINavigationController中 并实现委托方法。

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
  }

答案 1 :(得分:4)

由于您在当前活动控制器的基础上呈现contactPicker视图控制器,因此您无法访问导航栏,因为视图完全呈现,如果您想拥有按钮,就像在Apple联系人应用程序中那样,您需要嵌入在UINavigationController中显示viewcontroller,并添加左右栏按钮项。

参考下面的苹果样本,其中展示了相同的内容。 https://developer.apple.com/library/ios/samplecode/iPhoneCoreDataRecipes/Listings/Classes_RecipeAddViewController_m.html

答案 2 :(得分:4)

视图控制器必须嵌入在UINavigationController中,您应该推送或显示视图控制器:

navigationController?.pushViewController(contactPicker, animated: true)

而不是呈现视图控制器