7

Mi piacerebbe capire un modo in modo che, se l'utente preme il pulsante "Annulla" (che non credo possa essere rimosso) in un ABPeoplePickerNavigationController, il controller di visualizzazione non lo fa Chiudi, o verrà riaperto automaticamente.Swift: Impedisci ABPeoplePickerNavigationController da Closing

Ad esempio, dato il seguente:

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

mi piacerebbe essere in grado di fare qualcosa di simile:

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) 
} 

Questo non funziona; tuttavia, poiché l'istruzione if non "attende" fino a quando l'utente non ha premuto il pulsante Annulla o premuto un contatto.

risposta

4

Non sono sicuro che esista un modo per rimuovere il pulsante Annulla o impedirne il funzionamento, ma è possibile rispondere al delegato func peoplePickerNavigationControllerDidCancel(_ peoplePicker: ABPeoplePickerNavigationController!) per gestire il caso in cui viene premuto il pulsante Annulla.

Suggerirei piuttosto che riaprire immediatamente il selettore, si apre un avviso che indica all'utente che è necessario selezionare qualcuno, quindi riaprirlo da lì. Potrebbe sentirsi rotto se si annulla e si riapre immediatamente.

Reference

edit:
Presentare un avviso o il selettore probabilmente ha bisogno di essere in ritardo abbastanza a lungo per il selettore precedente per chiudere. dispatch_after

+0

Questo sembra essere quasi esattamente quello di cui ho bisogno! Tuttavia, quando provo a presentare un'altra istanza di un 'ABPPNC' o un' UIAlertController' (come suggerito saggiamente), viene visualizzato un errore che dice: 'Attenzione: tentativo di presentare su la cui vista non è nella gerarchia della finestra! ' – Randoms

+0

Suppongo che tu stia presentando l'avviso mentre il selettore di persone si sta animando fuori dallo schermo. Prova a eseguire wrapping del presentViewController per l'avviso in un dispatch_after http://stackoverflow.com/questions/24034544/dispatch-after-gcd-in-swift – esthepiking