112 votes

UITableView Définition de certaines cellules comme "non sélectionnables".

Comment puis-je définir la propriété cell de l'UITableView pour qu'elle ne soit pas sélectionnable ? Je ne veux pas voir la boîte de sélection bleue lorsque l'utilisateur tape sur la cellule.

4 votes

Note aux googleurs récents : La façon de procéder à partir d'iOS 6 et plus est la suivante tableView:shouldHighlightRowAtIndexPath: como noté par Ayush ci-dessous

203voto

Sebastian Celis Points 7284

Pour empêcher la sélection de rangées

Pour empêcher complètement la sélection de l UITableViewCell avez votre UITableViewDelegate mettre en œuvre tableView:willSelectRowAtIndexPath: . À partir de cette méthode, vous pouvez retourner nil si vous ne voulez pas que la ligne soit sélectionnée.

- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
    // Determine if row is selectable based on the NSIndexPath.

    if (rowIsSelectable) {
        return path;
    }
    return nil;
}

Cela empêche la sélection de la ligne et tableView:didSelectRowAtIndexPath: d'être appelé. Notez, cependant, que cela ne pas empêcher la ligne d'être mise en évidence.

Pour éviter la mise en évidence des rangées

Si vous souhaitez éviter que la ligne soit visuellement mise en évidence au toucher, vous pouvez faire en sorte que l'attribut selectionStyle est réglé sur UITableViewCellSelectionStyleNone ou, de préférence, vous pouvez avoir votre UITableViewDelegate mettre en œuvre tableView:shouldHighlightRowAtIndexPath: comme suit :

- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Determine if row is selectable based on the NSIndexPath.

    return rowIsSelectable;
}

1 votes

Merci ! Exactement ce dont j'avais besoin.

12 votes

Cela devrait être la réponse acceptée, à mon avis. Elle corrige en fait le problème au lieu de le masquer.

4 votes

Notez que tableView:willSelectRowAtIndexPath : est appelé après avoir mis en surbrillance la cellule, ce qui produira un scintillement. Extrait de la description d'Apple : Cette méthode n'est pas appelée tant que les utilisateurs ne touchent pas une ligne et ne lèvent pas leur doigt ; la ligne n'est pas sélectionnée avant ce moment, bien qu'elle soit mise en évidence lors du toucher.

153voto

Daniel Dickison Points 15182

Définir la valeur de la cellule du tableau selectionStyle à la propriété UITableViewCellSelectionStyleNone . Cela devrait l'empêcher de s'afficher en surbrillance. Vous pouvez également vérifier cette propriété dans votre fichier d'aide. tableView:didSelectRowAtIndexPath: .

3 votes

Kendall a raison. Suivez la réponse de Sebastian Celis pour éviter que didSelectRowAtIndexPath ne soit appelé en premier lieu. Vous devez également définir selectionStyle, afin d'éviter la mise en évidence.

0 votes

Oui, je suppose que la réponse de Sebastian Celis est la bonne, merci Daniel.

1 votes

Les adeptes du storyboard qui utilisent des TableViews statiques peuvent sélectionner un UITableViewCell et, sous l'inspecteur des attributs, trouver l'attribut Sélection et le définir sur Aucun

17voto

hanumanDev Points 2649

Utilisez ça :

cell.selectionStyle = UITableViewCellSelectionStyleNone;

5 votes

Cela empêche seulement la couleur de la sélection d'apparaître, didSelectRowAtIndexPath est encore appelé.

0 votes

C'est aussi exactement la même réponse que celle de Daniel Dickison à cette question.

0 votes

Swift 2.2 UPDATE -- cell.selectionStyle = UITableViewCellSelectionStyle.None

11voto

Ayush Goel Points 156

Pour iOS 6+ uniquement.

Vous pouvez implémenter la méthode tableView:shouldHighlightRowAtIndexPath: dans votre délégué. Plus d'informations ici : http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

3 votes

Il devrait avoir beaucoup plus de votes positifs. C'est la bonne réponse, changer le style de sélection pour que vous ne puissiez pas voir qu'une cellule est sélectionnée, désactiver l'interaction avec l'utilisateur pour que vous ne puissiez pas taper sur une cellule ou désélectionner les cellules lors de la sélection sont des hacks.

9voto

JOM Points 4282

J'ai eu ce problème aussi, j'ai essayé tout ce qui a déjà été mentionné. L'astuce finale, qui a permis de se débarrasser du "flash bleu" lors de la sélection d'une cellule de tableau, a été d'ajouter cette ligne :

self.myTableView.allowsSelection = NO;

Je ne sais pas si c'était cette ligne ou tout le reste, mais le résultat total est que je n'ai plus de sélection bleue ni même de flash bleu. Heureux !

2 votes

Le problème est que toutes les cellules du tableau ne sont pas sélectionnables. Si vous voulez que certaines cellules soient sélectionnables et que d'autres ne le soient pas, cela ne fonctionnera pas. L'approche de Sebastian a fonctionné pour moi.

0 votes

True, allowsSelection = NO désactivera la sélection pour toutes les cellules.

1 votes

Existe-t-il une propriété équivalente dans Interface Builder pour cette propriété ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X