我试图让用户创建一个新联系人。虽然我已经让屏幕提示用户输入他的所有细节,但顶部没有导航栏(就像默认的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属性,但它没有帮助。
感谢您的帮助。我在其他论坛上看到了这个问题,但他们没有帮助。
答案 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)
而不是呈现视图控制器