2013-09-30 21 views
13

Apple oferuje ładny, kompleksowy i mały przykład "QuickContacts" (developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html), przedstawiający podstawowe użycie Address Book UI Framework. - Kod źródłowy do pobrania działa zgodnie z opisem (po dodaniu osoby o nazwie "Appleseed" do książki adresowej lub zmianie nazwiska osoby w linii 246 (z QuickContactsViewController.m) na coś, co już istnieje w twojej książce adresowej).iOS7 - ABPersonViewController, tryb edycji

Pytanie: Jak możemy zmodyfikować funkcję funkcja -(void)showPersonViewController w taki sposób, że ABPersonViewController "picker" jest już edycji trybie (z widocznym „Gotowe” editingButton), kiedy otwiera (po pchanych na navigationController użytkownika stos).

W wersjach iOS wcześniejszych niż "7", była to prosta sprawa jedynie wstawienia, np. picker.editing = YES; przed popchnięciem selektora na stos nav, aby zobaczyć go w trybie edycji, po jego otwarciu (patrz poniższy kod).

W systemie iOS7 to już nie działa.

Czy jest to błąd w systemie iOS7, jeśli tak, czy istnieje proste obejście (zamiast np. Inżynieria wsteczna klasy ABPersonViewController)? - A może trzeba inaczej kodować, w dzisiejszych czasach?

Czekamy na Twoje komentarze.

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

Jest to błąd w iOS 7. Im więcej ludzi, którzy go zgłosić im wyższy priorytet poprawka zostanie przypisany. http://bugreport.apple.com –

+0

@ Tommie C. - Masz rację, Apple potwierdził, że to błąd. - Dzięki za komentarz. – user2831473

+0

To jeszcze nie zostało naprawione wydaje się, że ?? – SAHM

Odpowiedz

10

Można użyć ABNewPersonViewController zamiast ABPersonViewController, poniżej jest kod:

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

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

w metodzie protokołu - (void) newPersonViewController: didCompleteWithNewPerson: Osoba ABRecordRef będzie mieć wartość NULL (jeśli użytkownik anuluje edycję) lub oryginalną wartość (zainicjowaną w picker.displayedPerson = person;) – Vyacheslav

+0

ratownik !!!!! Wielkie dzięki! – xialin

Powiązane problemy