2010-02-05 3 views
2

Dans ma vue de table, j'ai le nombre de lignes qui ont un type d'accessoire de bouton de détail de divulgation et lorsque j'appuie sur la ligne ou l'accessoire, une nouvelle vue est transmise à un contrôleur de navigation. J'appelle le deselectRowAtIndexPath à la fin de la fonction didSelectRowAtIndexPath.AccessoryDetailDisclosureButton ne désélectionne pas après avoir appelé deselectRowAtIndexPath

Si j'appuie sur le bouton des accessoires, je passe à une nouvelle vue, mais elle reste en surbrillance lorsque je reviens à cette vue (pop). La ligne est désélectionnée comme prévu mais pas ceci. Des pensées sur la façon de «unhighlight» il?

cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    } 
    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
    [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 
    [self tableView:tableView didSelectRowAtIndexPath:indexPath]; 
    } 

Répondre

1

Retirez simplement de votre

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath; 
méthode

la déclaration

[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop]; 

Depuis votre table permet déjà la sélection, et vous il désélectionnant correctement dans

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 

vous sont faits, parce que la ligne sera mise en surbrillance lorsqu'elle est sélectionnée en appuyant sur le bouton de divulgation, et désélectionnée lorsque tableView:didSelectRowAtIndexPath: est exécutée.

+0

Cela a fonctionné pour désélectionner l'accessoire, mais la ligne entière ne s'affiche pas lorsque j'appuie sur le bouton accessoire. Y'a-t-il une quelconque façon de réussir cela? – Rob

+0

Vous avez raison, la ligne n'est pas en surbrillance. Cependant, le Apple HIG n'impose pas de mettre en évidence toute la ligne lorsque vous appuyez sur le bouton de divulgation. Toutes mes applications fonctionnent comme décrit, y compris celles disponibles sur l'AppStore. –

+0

Assez juste, merci pour l'aide. – Rob

3

Pour ceux qui sont encore gênés par cela et veulent une solution qui semble fonctionner en ce moment, essayez ceci:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

} 

Vous devez recharger les données FIRST et puis sélectionnez la ligne afin que le point culminant apparaît sous vos options de feuille d'action.

+0

le second paramètre de '-reloadRowsAtIndexPaths: withRowAnimation:' n'est pas un 'BOOL'; c'est un type 'UITableViewRowAnimation' – user102008

Questions connexes