2013-09-30 12 views
13

Apple dispone di un semplice e completo esempio "QuickContacts" (developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html), che illustra l'utilizzo di base di Address Book UI Framework. - Il codice sorgente scaricabile funziona come descritto (una volta aggiunta una persona denominata "Appleseed" alla tua rubrica o modifica il nome della persona nella riga 246 (di QuickContactsViewController.m) a qualcosa che già esiste nella tua rubrica).iOS7 - ABPersonViewController, modalità di modifica

Domanda: Come possiamo modificare la Funzione -(void)showPersonViewController in modo tale che il ABPersonViewController "picker" è già in editing-mode (con un visibile "Done" editingButton), quando si apre (dopo essere stato spinto sul navigationController del pila).

Nelle versioni iOS precedenti a "7", si trattava di una questione diretta di inserimento, ad es. picker.editing = YES; prima di spingere il selettore nella pila di navigazione, per vederlo in modalità di modifica, una volta aperto (vedere il codice di seguito).

In iOS7, questo non funziona più.

Si tratta di un bug in iOS7, se è così, c'è un semplice work-around (piuttosto che ad esempio il reverse engineering della classe ABPersonViewController)? - O ha bisogno di essere codificato diversamente, al giorno d'oggi?

In attesa di un vostro commento.

-(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

Questo è un bug in iOS 7. I più persone che riferiscono che la correzione priorità più alta saranno assegnati. http://bugreport.apple.com –

+0

@ Tommie C. - Hai ragione, Apple ha confermato che è un bug. - Grazie per il tuo commento. – user2831473

+0

Questo ancora non è stato risolto sembra ?? – SAHM

risposta

10

È possibile utilizzare al posto di ABNewPersonViewController ABPersonViewController, Bellow è il codice:

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

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

nel metodo di protocollo - (void) newPersonViewController: didCompleteWithNewPerson: ABRecordRef persona sarà NULL (se l'utente annulla la modifica) o il valore originale (inizializzato a picker.displayedPerson = person;) – Vyacheslav

+0

salva vita !!!!! Molte grazie! – xialin

Problemi correlati