我目前正在更新我很久以前开始工作的旧Xcode项目。我将部署目标更新到iOS 10.0,因此我被迫用ABAddressBook
框架替换Contacts
框架。我过去常常在容器视图中显示ABPeoplePickerNavigationController
,它是UINavigationController
的根视图控制器的子视图。这样我就可以在导航控制器中显示People Picker UI,导航控制器位于标签栏控制器内(这意味着顶部的导航栏和底部的标签栏仍然显示在人员选择器UI周围)。我曾经使用这个代码(在导航控制器的根视图控制器的viewWillAppear
中调用:
let peoplePickerNavController:ABPeoplePickerNavigationController = ABPeoplePickerNavigationController()
self.addChildViewController(peoplePickerNavController)
peoplePickerNavController.didMove(toParentViewController: self)
peoplePickerNavController.navigationBar.removeFromSuperview()
peoplePickerNavController.view.frame = self.peoplePickerContainerView.bounds
peoplePickerNavController.view.translatesAutoresizingMaskIntoConstraints = true
peoplePickerNavController.peoplePickerDelegate = self
self.peoplePickerContainerView.addSubview(peoplePickerNavController.view)
使用此代码,它将完美显示地址簿,导航控制器的导航栏仍位于顶部,标签栏控制器的标签栏仍位于底部。我正试图用CNContactPickerViewController
做同样的事情,但我对这个有点麻烦。当我使用导航控制器做同样的事情时,它不会给我任何错误,但视图控制器没有显示。即使我将视图控制器的view
添加到我的容器视图中,它也只显示一个空的白色视图。这是我现在使用的代码:
let contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController()
self.addChildViewController(contactPickerViewController)
contactPickerViewController.didMove(toParentViewController: self)
contactPickerViewController.view.frame = self.contactPickerContainerView.bounds
contactPickerViewController.view.translatesAutoresizingMaskIntoConstraints = true
contactPickerViewController.delegate = self
self.contactPickerContainerView.addSubview(contactPickerViewController.view)
这两个代码之间唯一的显着区别是我没有从视图控制器中删除导航栏(因为它没有导航栏)。除此之外,我把所有东西都差不多了。我猜我需要更改其他一些东西以使其工作,因为将导航控制器添加到容器视图和添加视图控制器之间存在差异。任何人都可以帮助我,并给我一些如何实现这一目标的技巧?谢谢!
答案 0 :(得分:3)
使用此代码在tabBar
中显示contactPickerViewControllerlet contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController()
contactPickerViewController.modalPresentationStyle = .overCurrentContext
self.presentViewController(contactPicker, animated: false, completion: nil)