2013-09-30 23 views
13

Apple bietet ein schönes, umfassendes und kleines Beispiel, "QuickContacts" (developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html), das die grundlegende Verwendung der Address Book UI Framework umreißt. - Der herunterladbare Quellcode funktioniert wie beschrieben (sobald Sie eine Person namens "Appleseed" zu Ihrem Adressbuch hinzugefügt haben oder den Personennamen in Zeile 246 (von QuickContactsViewController.m) zu etwas ändern, das bereits in Ihrem Adressbuch vorhanden ist).iOS7 - ABPersonViewController, Bearbeitungsmodus

Frage: Wie können wir die Funktion -(void)showPersonViewController Funktion so modifizieren, dass die ABPersonViewController "picker" ist bereits in Bearbeitung-Modus (mit einem sichtbaren „Fertig“ editingButton), wenn sie sich öffnet (nach auf die Navigation des geschoben Stapel).

In iOS-Versionen vor "7" war es eine direkte Sache, nur z. picker.editing = YES; bevor Sie den Picker auf den nav-stack schieben, um ihn im Editiermodus zu sehen, sobald er geöffnet wird (siehe Code unten).

In iOS7 funktioniert das nicht mehr.

Ist dies ein Fehler in iOS7, wenn ja, gibt es einen einfachen Workaround (anstatt z. B. Reverse-Engineering der ABPersonViewController Klasse)? - Oder muss es heute anders kodiert werden?

Wir freuen uns auf Ihre Kommentare.

-(void)showPersonViewController 
{ 
    // Search for the person named "Appleseed" in the address book 
    NSArray *people = (NSArray *)CFBridgingRelease(ABAddressBookCopyPeopleWithName(self.addressBook, CFSTR("Appleseed"))); 
    // Display "Appleseed" information if found in the address book 
    if ((people != nil) && [people count]) 
    { 
     ABRecordRef person = (__bridge ABRecordRef)[people objectAtIndex:0]; 
     ABPersonViewController *picker = [[ABPersonViewController alloc] init]; 
     picker.personViewDelegate = self; 
     picker.displayedPerson = person; 
     // Allow users to edit the person’s information 
     picker.allowsEditing = YES; 

     picker.editing = YES; // in iOS6 this works, in iOS7 it does not 

     [self.navigationController pushViewController:picker animated:YES]; 
    } 
    ... 
    ... 
} 
+1

Dies ist ein Fehler in iOS 7. Je mehr Leute, die es die höhere Priorität fix berichten zugewiesen werden. http://bugreport.apple.com –

+0

@ Tommie C. - Sie haben Recht, Apple bestätigt, dass es ein Fehler ist. - Vielen Dank für Ihren Kommentar. – user2831473

+0

Das ist noch nicht behoben es scheint ?? – SAHM

Antwort

10

Sie können ABNewPersonViewController anstelle von ABPersonViewController, unten ist der Code:

ABNewPersonViewController *picker = [[[ABNewPersonViewController alloc] init] autorelease]; 
picker.newPersonViewDelegate = self; 
picker.displayedPerson = person; 
[email protected]"edit contact"; 

[self.navigationController pushViewController:picker animated:YES]; 
+1

in Protokollmethode - (void) newPersonViewController: didCompleteWithNewPerson: ABRecordRef Person wird entweder NULL sein (wenn Benutzer die Bearbeitung abbrechen) oder Originalwert (initialisiert bei picker.displayedPerson = Person;) – Vyacheslav

+0

Lebensretter !!!!! Danke vielmals! – xialin