7

Ich würde gerne einen Weg, so dass, wenn der Benutzer die Schaltfläche "Abbrechen" (die ich glaube nicht, kann entfernt werden) in einem ABPeoplePickerNavigationController drücken, der View-Controller entweder doesn nicht schließen oder wird automatisch wieder geöffnet.Swift: Verhindern ABPeoplePickerNavigationController

Zum Beispiel gegeben wie folgt zusammen:

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

Ich möchte in der Lage sein, etwas zu tun wie:

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

Dies funktioniert nicht; Allerdings wird die if-Anweisung nicht "warten", bis der Benutzer die Abbrechen-Schaltfläche gedrückt oder einen Kontakt gedrückt hat.

Antwort

4

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, die Abbrechen-Schaltfläche zu entfernen oder zu verhindern, dass sie funktioniert, aber Sie könnten auf den func peoplePickerNavigationControllerDidCancel(_ peoplePicker: ABPeoplePickerNavigationController!) Delegaten reagieren, um den Fall zu bearbeiten, in dem die Abbrechen-Schaltfläche gedrückt wird.

Ich würde empfehlen, anstatt sofort den Picker wieder zu öffnen, öffnen Sie eine Warnung, die dem Benutzer sagt, dass sie jemanden auswählen müssen, dann öffnen Sie es von dort wieder. Es kann sich gebrochen anfühlen, wenn sie abbrechen und es sofort wieder öffnet.

Reference

edit:
Geben Sie eine Benachrichtigung oder den Kommissionierer muss wahrscheinlich lange genug verzögert werden, um die vorherigen Picker zu schließen. dispatch_after

+0

Das scheint fast genau das zu sein, was ich brauche! Wenn ich jedoch versuche, eine weitere Instanz eines "ABPPNC" oder "UIAlertControllers" zu präsentieren (wie Sie es so richtig vorgeschlagen haben), bekomme ich eine Fehlermeldung: 'Warnung: Versuch auf dessen Ansicht sich nicht in der Fensterhierarchie befindet! ' – Randoms

+0

Meine Vermutung ist, dass Sie den Alarm anzeigen, während der Personenwähler vom Bildschirm animiert wird. Versuchen Sie, den presentViewController für die Warnung in einem Dispatch_after um http://stackoverflow.com/questions/24034544/dispatch-after-gcd-in-swift zu verpacken – esthepiking

Verwandte Themen