Отображать CNContactPickerViewController в представлении контейнера?
В настоящее время я обновляю старый проект Xcode, над которым я начал работать давным-давно. Я обновил цель развертывания до iOS 10.0, поэтому меня заставили заменить ABAddressBook
рамки с Contacts
фреймворк. Я использовал, чтобы представить ABPeoplePickerNavigationController
внутри Контейнерного Представления, которое было подпредставлением корневого контроллера представления UINavigationController
, Таким образом, я смог представить интерфейс People Picker внутри контроллера навигации, который находился внутри контроллера панели вкладок (что означало, что панель навигации вверху и панель вкладок внизу все еще отображались вокруг интерфейса выбора людей). Я делал это с этим кодом (называется в 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)
Единственное существенное различие между этими двумя кодами состоит в том, что я не удаляю панель навигации из контроллера представления (потому что у него нет такового). Кроме того, я оставил все почти одинаково. Я предполагаю, что мне нужно изменить несколько других вещей, чтобы сделать эту работу, так как есть разница между добавлением контроллера навигации в представление контейнера и добавлением контроллера представления. Кто-нибудь может мне помочь и дать несколько советов, как этого добиться? Спасибо!
1 ответ
Используйте этот код для отображения contactPickerViewController внутри tabBar
let contactPickerViewController:CNContactPickerViewController = CNContactPickerViewController()
contactPickerViewController.modalPresentationStyle = .overCurrentContext
self.presentViewController(contactPicker, animated: false, completion: nil)