puedo para descargar cómo como actualizar ios ios8 abpeoplepickerview

cómo - ios 8 para iphone 4 descargar



Cambios de ABPeoplePickerNavigationController con iOS8? (3)

Desde que actualicé XCode (6.0, 6A313) y mi iOS (8.0, 12A365) en el iPhone a gm seeds, el código ABPeoplePickerNavigationController no funciona como antes.

  • iOS 7.1.2: si alguien quiere importar un contacto, se abrirá la libreta de direcciones y verá la lista completa de contactos, después de elegir uno, abrirá la vista de detalle de un contacto y podrá agregar el contacto con un clic del teléfono. número que desea importar.

  • iOS 8.0: todo es similar, pero si hace clic en el número de un contacto, marque el número de teléfono en lugar de importarlo.

Código:

#pragma mark - AddressBook Delegate Methods -(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ return YES; } -(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{ // Get the first and the last name. Actually, copy their values using the person object and the appropriate // properties into two string variables equivalently. // Watch out the ABRecordCopyValue method below. Also, notice that we cast to NSString *. NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); // Compose the full name. NSString *fullName = @""; // Before adding the first and the last name in the fullName string make sure that these values are filled in. if (firstName != nil) { fullName = [fullName stringByAppendingString:firstName]; } if (lastName != nil) { fullName = [fullName stringByAppendingString:@" "]; fullName = [fullName stringByAppendingString:lastName]; } // Get the multivalue number property. CFTypeRef multivalue = ABRecordCopyValue(person, property); // Get the index of the selected number. Remember that the number multi-value property is being returned as an array. CFIndex index = ABMultiValueGetIndexForIdentifier(multivalue, identifier); // Copy the number value into a string. NSString *number = (__bridge NSString *)ABMultiValueCopyValueAtIndex(multivalue, index); nameTextField.text = fullName; numberTextField.text = number; // Dismiss the contacts view controller. [_addressBookController dismissViewControllerAnimated:YES completion:nil]; return NO; } // Implement this delegate method to make the Cancel button of the Address Book working. -(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{ [_addressBookController dismissViewControllerAnimated:YES completion:nil]; }

No se pudo encontrar ninguna respuesta en la biblioteca de desarrolladores iOS de Apple. ¿Tiene alguien más una solución para ello?


Esto me funcionó tanto en iOS 8 como en iOS 7 y más bajo.

Tenga en cuenta que estoy usando esta persona didSelectPerson: (ABRecordRef) en su lugar.

//Needed for iOS 8 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { NSLog(@"Went here 1 ..."); [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person]; } //needed for iOS 7 and lower - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { NSLog(@"Went here 2 ..."); //add your logic here }


Vea también el método delegado, nuevo con iOS8:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person; { [self selectedPerson:person]; }

Eso es lo que quería en mi caso.


iOS 8 requiere que se implemente un nuevo método de delegado para esto:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { }

Mantenga el antiguo método de delegado en su lugar para soportar iOS 7 o anterior. Lo que hago en mi aplicación es llamar al método delegado de iOS 7 desde el método delegado de iOS 8:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier]; }

Si este método de delegado no se implementa en iOS 8, tocar el valor provoca la acción. Cuando se implementa, se llama al delegado en su lugar con el valor seleccionado.