Réponses:
Définissez la selectionStyle
propriété de la cellule du tableau sur UITableViewCellSelectionStyleNone
. Cela devrait l'empêcher de se mettre en évidence, et vous pouvez également vérifier cette propriété dans votre fichier tableView:didSelectRowAtIndexPath:
.
Pour empêcher complètement la sélection du UITableViewCell
, ayez votre UITableViewDelegate
outil tableView:willSelectRowAtIndexPath:
. À partir de cette méthode, vous pouvez revenir nil
si vous ne souhaitez 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 ligne d'être sélectionnée et tableView:didSelectRowAtIndexPath:
d'être appelée. Notez cependant que cela n'empêche pas la ligne d'être mise en évidence.
Si vous souhaitez empêcher que la ligne ne soit mise en évidence visuellement au toucher, vous pouvez vous assurer que la cellule selectionStyle
est définie sur UITableViewCellSelectionStyleNone
, ou de préférence, vous pouvez avoir votre UITableViewDelegate
outil tableView:shouldHighlightRowAtIndexPath:
comme suit:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
car il willSelectRowAtIndexPath
sera toujours appelé de toute façon.
utilisez ceci:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
est toujours appelé.
Pour iOS 6+ uniquement.
Vous pouvez implémenter la méthode
tableView:shouldHighlightRowAtIndexPath:
dans votre délégué. En savoir plus ici: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html
Si ce problème avait également essayé tout ce qui a déjà été mentionné. La dernière astuce, qui a éliminé le "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 seule ligne ou tout ce qui était combiné, mais comme résultat total, je n'obtiens plus de sélection bleue ni même le flash bleu. Heureux!
Ensemble cell.userInteractionEnabled = NO;
Apple dit que la première chose à faire dans didSelectRowAtIndexPath est de désélectionner la ligne
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
Ensuite, vous pouvez changer le AccessoryType pour être une coche, ou aucun, etc. Ainsi, lorsque vous entrez didSelectRowAtIndexPath, vous pouvez désélectionner la ligne, et si elle n'est pas censée être sélectionnée, ne vérifiez simplement pas cette ligne.
Une autre façon consiste à ajouter quelques méthodes de catégorie à UITableViewCell
. J'aime mieux cela que la réponse de Sébastien (également bonne) parce que la façon dont je construis ma table. J'ai pensé que cela pourrait être utile à quelqu'un d'autre.
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
Swift 4:
vous pouvez empêcher la sélection et la mise en évidence en utilisant UITableViewDelegate: shouldHighlightRowAt
Cette réponse suppose que vous avez une cellule personnalisée créée nommée: CustomTableViewCell
et que vous avez créé un booléen à l'intérieur de cette cellule personnalisée nommée: isSelectable
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
Ceci est la version Swift de la réponse objc de Sebastian Celis.
Il existe un autre moyen simple d'éviter que la sélection n'apparaisse en bleu.
Sélectionnez une cellule que vous ne souhaitez pas voir apparaître en bleu.
Sélectionnez ensuite l'inspecteur d'attributs (l'icône de bouclier à côté de l'icône de règle dans la vue des propriétés sur le côté).
Puis changez le champ «Sélection» de «Bleu» à «Aucun».
Notez que cela est probablement toujours en cours de sélection, il n'apparaîtra tout simplement pas comme sélectionné si tout ce que vous voulez est d'éviter l'effet d'interface utilisateur.
Utilisez tableView: willDisplayCell: forRowAtIndexPath: au lieu de tableView: didSelectRowAtIndexPath: pour éliminer le flash qui apparaît la première fois que vous touchez la cellule.
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Pour rendre certaines lignes non sélectionnées, vous devez apporter des modifications dans deux méthodes de délégué UITableView.
Dans la méthode ci-dessous
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
après allocation de la cellule, écrivez le code ci-dessous
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
Le code ci-dessus empêchera de mettre en surbrillance la cellule, si l'utilisateur essaie de sélectionner.
dans cette méthode déléguée ci-dessous
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
si vous n'écrivez pas, la if(indexPath.row == someCellNumber) return;
ligne sera toujours sélectionnée et il y a un risque de plantage de l'application
tableView:shouldHighlightRowAtIndexPath:
comme indiqué par Ayush ci