2009-08-21 8 views
5

Je montre un ABPeoplePickerNavigationController en tant qu'onglet dans mon application. L'utilisateur clique sur un nom, puis adresse e-mail, puis je fais quelque chose avec l'adresse e-mail. Par la suite, j'aimerais que la personne et la propriété qu'ils ont sélectionnées disparaissent (ne soient pas mises en surbrillance).deselectRowAtIndexPath sur un ABPeoplePickerNavigationController

Dans une table normale, j'appellerais deselectRowAtIndexPath. Mais avec ABPeoplePickerNavCont, je ne semble pas avoir accès à sa table, je ne sais pas non plus quel indexPath est sélectionné, et il n'y a pas d'API pour désélectionner la ligne. Sur la plupart des applications, ABPeoplePickerNavCont est utilisé de manière modale, donc peu importe que la ligne soit toujours mise en surbrillance parce que tout est rejeté. Mais dans mon application, il n'est pas rejeté (tout comme l'onglet Contacts dans l'application Téléphone).

Des idées?

Répondre

3

rejeter le peoplepicker sans animation, puis le présenter à nouveau sans animation. Ça à l'air bon.

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

    [self dismissModalViewControllerAnimated:NO]; 

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

Merci pour la suggestion. Mon peoplePicker n'est pas montré comme un modal - c'est un onglet sur une barre d'onglets ... donc il n'est pas possible de le rejeter de cette façon. –

10

C'est ce que je fais ... et cela semble fonctionner parfaitement. J'ajoute également un accessoire de coche lorsque vous sélectionnez/désélectionnez un élément. Laissez-moi savoir ce que vous pensez. Merci :)

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

Modifier la réponse de robby valles, voilà comment je Désélectionnez la 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]; 
} 

Hope this helps.

+0

belle solution! –