Personalización de celda de tabla en ABPeoplePickerNavigationController

Pasé algún time buscando esta respuesta en SO, pero no pude encontrarlo, así que aquí va:

Estoy comenzando con un ABPeoplePickerNavigationController, y cuando un usuario toca a una persona, serán llevados a un ABPersonViewController donde podrán seleccionar numbers de teléfono y direcciones de correo electrónico. Una vez que hayan terminado con el ABPersonViewController, se lo llevarán al ABPeoplePickerNavigationController. Cosas bastante simples.

Lo que quiero es agregar un detailLabel a la celda de tabla que seleccionaron en ABPeoplePickerNavigationController después de que eligieron un número de teléfono o una dirección de correo electrónico. Algo así como "Correo electrónico y número de teléfono elegido" o "Número de teléfono elegido".

La documentation de Apple dice:

  No debería necesitar subclasss de estos controlleres;  la forma esperada de modificar su comportamiento es mediante la implementación de su delegado.

Los methods delegates proporcionados no manejarán esto. ¿Hay alguna forma de lograr esto sin subclassarme? Y, si tengo que subclass ABPeoplePickerNavigationController, ¿qué método replaceé para actualizar detailLabel?

¡Gracias!

Este bit de código parece funcionar para mí, agarra la celda cuando el usuario selecciona a una persona y agrega una marca de verificación. Supongo que también puedes modificar la celda de otras maneras en este punto.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ UIView *view = peoplePicker.topViewController.view; UITableView *tableView = nil; for(UIView *uv in view.subviews) { if([uv isKindOfClass:[UITableView class]]) { tableView = (UITableView*)uv; break; } } if(tableView != nil) { UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]]; if(cell.accessoryType == UITableViewCellAccessoryNone){ cell.accessoryType = UITableViewCellAccessoryCheckmark; } else{ cell.accessoryType = UITableViewCellAccessoryNone; } [cell setSelected:NO animated:YES]; } return NO; } 

Tengo idea de cómo hacerlo, creo que será útil para usted, pero nunca implementado de esta manera. Primero tienes que ir con una tabla personalizada. Para esa tabla, puede dar todos los nombres de contacto de su libreta de direcciones. puede usar http://developer.apple.com/library/mac/#documentation/userexperience/Reference/AddressBook/Classes/ABAddressBook_Class/Reference/Reference.html

solo lo puedes entender.

Tienes que usar estos methods. 1) – (NSArray *) personas que obtendrá todos los loggings de las personas en la matriz devuelta. cada logging tendrá identificación única, debes recuperarla

ABRecord rec = [returnedArray objectAtIndex: 0];

NSString * pid = rec.uniqueId

– (NSString *) uniqueId (este es el método de propiedad ABRecord)

una vez que lo obtuviste, puedes retirar de tu matriz lo que quieras utilizando esa ID de logging / único.