2009-08-21 7 views
5

Estoy mostrando un ABPeoplePickerNavigationController como una pestaña en mi aplicación. El usuario hace clic en un nombre, luego en la dirección de correo electrónico, luego hago algo con la dirección de correo electrónico.deselectRowAtIndexPath en un ABPeoplePickerNavigationController

Después, me gustaría que la persona y la propiedad que seleccionaron desaparezcan (no se destaque).

En una tabla normal, llamaría deselectRowAtIndexPath. Pero con ABPeoplePickerNavCont no parece tener acceso a su tabla, ni sé qué indexPath está seleccionado, ni hay una API para anular la selección de la fila.

En la mayoría de las aplicaciones, ABPeoplePickerNavCont se usa de forma modal, por lo que no importa que la fila aún esté resaltada porque se descarta todo. Pero en mi aplicación no se descarta (al igual que la pestaña de contactos en la aplicación de teléfono).

¿Alguna idea?

Respuesta

3

elimine el PeoplePicker sin una animación, luego vuelva a presentarlo sin animación. Se ve bien.

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ 

    [self dismissModalViewControllerAnimated:NO]; 

    [self presentModalViewController:peoplePicker animated:NO]; 
     return NO; 
} 
+0

Gracias por la sugerencia. Mi PeoplePicker no se muestra como un modal, es una pestaña en una barra de pestañas ... por lo que no es posible descartarlo de esta manera. –

10

Esto es lo que estoy haciendo ... y parece funcionar perfectamente. También estoy agregando un accesorio de marca de verificación cuando selecciona/deselecciona un artículo. Déjame saber lo que piensas. Gracias :)

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]]; 

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    [cell setSelected:NO animated:YES]; 
} 
+0

Excillent ....... – Muzammil

4

Modificación de respuesta valles de Robby, así es como me anular la selección de tableview de ABPeoplePickerNavigationController:

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]]; 

    cell.accessoryType = cell.accessoryType == UITableViewCellAccessoryNone ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone; 

    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES]; 
} 

Espero que esto ayude.

+0

buena solución! –

Cuestiones relacionadas