2014-09-21 3 views
5

In iOS Entlassung 8 wurde folgendes veraltet:Wie peoplePickerNavigationController, um zu verhindern automatisch

- (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) People shouldContinueAfterSelectingPerson: (ABRecordRef) Person

und jetzt wir sollen verwenden:

- (void) peoplePickerNavigationController: didSelectPerson:

Diese Methode löscht die Personenauswahl jedoch automatisch nach der ersten Auswahl, wenn die alte Version dies nicht getan hat. Ich habe eine Routine, die jeden Namen aufzeichnen muss, den der Benutzer eins nach dem anderen auswählt. Ich kann den Personenwähler nach jeder Auswahl erneut anzeigen, aber er startet die Kontaktliste beim ersten Namen.

Ich hoffe, ich habe das richtig erklärt. Wer weiß, wie man den Peopickernavigationscontroller in iOS 8 vor der automatischen Entlassung bewahrt, wie es früher in ios7 der Fall war?

+0

Haben Sie eine Lösung gefunden? –

+0

@NikitaIvaniuschtschenko check out meine Antwort unter – ayalcinkaya

Antwort

1

Ich habe eine Lösung gefunden, die People Picker nach der Auswahl einer Eigenschaft wieder anzuzeigen.

Implementieren Sie die Delegate-Methode, die behandelt, wenn eine Person eine Kontakteigenschaft auswählt (nur von iOS 8 aufgerufen): Der Trick für mich war, Picker dann zu entlassen, dann rufen Sie sofort meine "Show Picker" -Methode im Abschlussdelegaten (ja , ein Delegierter innerhalb eines Delegierten).

Stellen Sie sicher, dass Sie die Personenauswahl einmal aktivieren, wenn Sie möchten, dass sie dort angezeigt wird, wo sie zuletzt aufgehört hat. Hope this

hier ist mein showPeoplePickerController Methode

#pragma mark Show all contacts 
// Called when users tap "Display Picker" in the application. Displays a list of contacts and allows users to select a contact from that list. 
-(void)showPeoplePickerController 

{ 
     picker.peoplePickerDelegate = self; 
     picker.delegate = self; 
     picker.visibleViewController.searchDisplayController.searchBar.delegate = self; 

     [self presentViewController:picker animated:NO completion:nil]; 
} 

Zuerst initialisieren den Picker hilft. Beachten Sie, dass ein Berechtigungsmethodenaufruf für Kontakte Zugang in erster Linie

picker = [[ABPeoplePickerNavigationController alloc] init]; 
//have self prompt first, then based off answer prompt them with internal address book stuff or now 
if(ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
{ 
    // show picker UI if the user has granted access to their Contacts 
    [self showPeoplePickerController]; 
} 

NOTES erforderlich ist:

  • ich zuvor initiierte Menschen Picker, wenn die Ansicht geladen. Einmal.
  • Wenn Sie die Option "animiert" auf "NO" beim Präsentieren und Löschen des Controllers auf "NO" setzen, wird der Übergang glatter.
+0

nicht ganz funktioniert. Vielleicht mache ich etwas falsch. Wie initialisierst du den Picker im Viewload? –

+0

@JackRomano was oder wo bricht dein Code ein? mehr Infos? – Tope

2

In der Dokumentation von ABPeoplePickerNavigationController, überprüfen Sie den Kommentar von Prädikat ForSelectionOfPerson.

// Optionally determines if a selected person should be returned to the app (predicate evaluates to TRUE), 
// or if the selected person should be displayed (predicate evaluates to FALSE). 
// If not set and -peoplePickerNavigationController:didSelectPerson: is implemented the selected person is returned to the app, 
// or if not set and -peoplePickerNavigationController:didSelectPerson:identifier: is implemented the selected person is displayed. 
// 
@property(nonatomic,copy) NSPredicate *predicateForSelectionOfPerson NS_AVAILABLE_IOS(8_0); 

Sie müssen also ein Prädikat von FALSE setzen, wenn Sie die ausgewählte Person angezeigt werden soll.

if ([picker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)]) 
{ 
    picker.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:NO]; 
} 
+0

Wie auch immer, es ist nicht dasselbe.Zuvor hatte ich die Chance, einen anderen View-Controller in denselben Navigations-Stack zu schieben, aber jetzt wird ABPeoplePickerNavigationController automatisch geschlossen. –