2

我试图让用户创建一个新的联系人。虽然我有屏幕提示用户输入他的所有详细信息,但顶部没有导航栏(就像在默认的Apple Contacts应用程序中一样)。无法退出现场。我在swift 2.0和Xcode 7.3中使用了ContactUI框架。下面的代码:不能关闭新联系人CNContactViewController,顶部没有酒吧

// 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属性,但它没有帮助。

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

+0

请标记我的答案,如果可能 – SPatel

回答

3

视图控制器必须嵌入的UINavigationController,你应该推或显示视图控制器:

navigationController?.pushViewController(contactPicker, animated: true) 

,而不是呈现视图控制器

3

由于您在当前活动控制器的顶部呈现contactPicker viewcontroller,因此您将无法访问导航栏,因为该视图已完全呈现,如果您想拥有Apple接触应用程序中的按钮,则需要将您的呈现视图控制器UINavigationController,并添加左右栏按钮项。

请参阅下面的演示相同的苹果示例。 https://developer.apple.com/library/ios/samplecode/iPhoneCoreDataRecipes/Listings/Classes_RecipeAddViewController_m.html

+0

工作,谢谢! –

5

你必须嵌入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 
    }