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.
Merci ! Exactement ce dont j'avais besoin.
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.
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.
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;
}
Cela devrait être la réponse acceptée, à mon avis. Elle corrige en fait le problème au lieu de le masquer.
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.
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.
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
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.
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 !
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.
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.
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