7

Я хотел бы найти способ, чтобы, если пользователь нажимает кнопку «Отмена» (которая, как я считаю, не может быть удалена) в ABPeoplePickerNavigationController, контроллер вида либо не делает «закрыть» или автоматически откроется снова.Swift: Предотвращение закрытия ABPeoplePickerNavigationController

Например, учитывая следующее:

var picker = ABPeoplePickerNavigationController() 
picker.peoplePickerDelegate = self 
self.presentViewController(picker, animated: true, completion: nil) 

Я хотел бы быть в состоянии сделать что-то вроде:

if (self.presentedViewController != picker && !userContinuedPastPicker) { 
//where userContinuedPastPicker is a boolean set to false 
//in a delegate method called when the user clicks on an a contact 
//(meaning the user didn't press the cancel button but instead clicked on a contact) 

    //create and present a UIAlertAction informing the user they must select a contact 

    //present picker again 
    self.presentViewController(picker, animated: true, completion: nil) 
} 

Это не работает; однако, поскольку оператор if не будет «ждать», пока пользователь не нажмет кнопку отмены или не нажмет контакт.

ответ

4

Я не уверен, что есть способ удалить кнопку отмены или предотвратить ее работу, но вы можете ответить на делегат func peoplePickerNavigationControllerDidCancel(_ peoplePicker: ABPeoplePickerNavigationController!), чтобы обработать случай, когда нажата кнопка отмены.

Я бы порекомендовал, а не сразу открывал сборщик, вы открыли предупреждение, сообщающее пользователю, что им нужно кого-то выбрать, затем откройте его обратно. Он может чувствовать себя сломанным, если они отменяются, и он немедленно открывается.

Reference

редактировать:
Представляя предупреждение или сборщик, вероятно, должен быть отложен достаточно долго для предыдущего выбора, чтобы закрыть. dispatch_after

+0

Это похоже на то, что мне нужно! Однако, когда я пытаюсь представить другой экземпляр 'ABPPNC' или' UIAlertController' (как вы так разумно предложили), я получаю сообщение об ошибке: 'Предупреждение: попытка представить в чей вид не находится в иерархии окон! ' – Randoms

+0

Я предполагаю, что вы представляете предупреждение, когда пользователь выбирает анимацию с экрана. Попробуйте обернуть элемент currentViewController для предупреждения в диспетчере_после http://stackoverflow.com/questions/24034544/dispatch-after-gcd-in-swift – esthepiking