Comment désactiver la sélection d'une seule cellule dans UITableView? J'en ai plusieurs, et je veux seulement que le dernier soit désactivé.Désactiver la sélection d'un seul UITableViewCell
Répondre
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = ...
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
Cela empêchera l'affichage de la cellule, mais 'tableView: didSelectRowAtIndexPath:' sera toujours appelé. – Brian
Voyez ma réponse pour une solution propre qui fonctionne réellement. – Barry
L'utilisation de 'cell.selectionStyle = .None' et' cell.userInteractionEnabled = false' combinées couvrira la plupart des scénarios. – SwiftArchitect
-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self numberOfRowsInSection] == [indexPath row]) {
return nil;
} else {
return indexPath;
}
}
la dernière ligne de la table ne sera pas sélectionné
Cela empêchera la sélection réelle de la cellule, mais elle sera toujours en surbrillance lorsque l'utilisateur la touchera – Brian
Désolé, vous devez ajouter le style UITableViewCellSelectionStyleNone à la cellule –
Je pourrais ajouter que la définition du style de sélection de table doit être effectuée dans cellForRowAtIndexPath: évitez le décalage lors du chargement de TableView (la vue de table prend un bon 1-2 pour désactiver la sélection pour la cellule). –
Pour arrêter juste quelques cellules étant sélectionnées utilisation:
cell.userInteractionEnabled = NO;
Outre la prévention de la sélection, ce qui arrête également tableView : didSelectRowAtIndexPath: appelé pour les cellules qui l'ont défini. Il va également faire en sorte que la voix off le traite comme un bouton atténué (qui peut être ou ne pas être ce que vous voulez).
Notez que si vous avez des éléments interactifs dans la cellule (c'est-à-dire des commutateurs/boutons), vous devrez utiliser cell.selectionStyle = UITableViewCellSelectionStyleNone;
à la place, puis ignorer les taps sur la cellule dans tableView:didSelectRowAtIndexPath:
.
Essayez de le faire sur la vue qui reçoit la surbrillance. Sinon, cela revient à désactiver la cellule. –
Je ne peux pas l'utiliser car il désactive également 'cell.accessoryView', que j'ai défini sur un' UIButton' que je veux pouvoir utiliser. – ma11hew28
En outre, Voice Over traitera incorrectement la cellule comme un bouton atténué au lieu d'un texte statique (avec un accessoire en option). – Endersstocker
Comme je l'ai mentionné in another thread toutes les méthodes ci-dessus ne résolvent pas le problème avec précision. La manière correcte de la désactivation d'une cellule se fait par la méthode
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
et en ce que la méthode on doit utiliser
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
qui désactive la sélection de cellule, mais encore permet à l'utilisateur d'interagir avec les sous-vues de la cellule comme un UISwitch.
Throw dans votre tableau personnalisé VC:
// cells lacking UITableViewCellAccessoryDisclosureIndicator will not be selectable
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType != UITableViewCellAccessoryDisclosureIndicator) {
return nil;
}
return indexPath;
}
// disabled cells will still have userinteraction enabled for their subviews
- (void)setEnabled:(BOOL)enabled forTableViewCell:(UITableViewCell *)tableViewCell
{
tableViewCell.accessoryType = (enabled) ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone;
// if you dont want the blue selection on tap, comment out the following line
tableViewCell.selectionStyle = (enabled) ? UITableViewCellSelectionStyleBlue : UITableViewCellSelectionStyleNone;
}
Ensuite pour activer/désactiver la sélection pour someTableViewCell, faites ceci:
[self setEnabled:state forTableViewCell:someTableViewCell];
Vous avez terminé et peut expédier.
Merci, cela fonctionne comme un charme! – Harry
La solution la plus propre que j'ai trouvée pour cela n'utilise que la méthode déléguée willDisplayCell.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if([indexPath row] == 0) //<-----ignores touches on first cell in the UITableView
{ //simply change this around to suit your needs
cell.userInteractionEnabled = NO;
cell.textLabel.enabled = NO;
cell.detailTextLabel.enabled = NO;
}
}
Vous ne devez pas prendre d'autres mesures dans la méthode déléguée didSelectRowAtIndexPath pour faire en sorte que la sélection de cette cellule est ignorée. Toutes les touches de cette cellule seront ignorées et le texte de la cellule sera également grisé.
avec iOS 6.
Vous pouvez utiliser la méthode de délégué à la suite et revenir NO
au cas où vous ne pas à être sélectionné et YES
au cas où vous voulez qu'il soit sélectionné.
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return indexPath.section == 0;
}
Essayez ceci dans rapide:
self.tableView.deselectRowAtIndexPath(indexPath, animated: true)
Si quelqu'un se demandant comment atteindre cet objectif en rapide alors voici mon code. J'utilise Xcode 7 et testé en utilisant iPad Retina (iOS 9).
cell.selectionStyle = UITableViewCellSelectionStyle .None
cell.userInteractionEnabled = false
Essayez de placer ce code à deux lignes si vous le souhaitez. Dans mon cas, j'ai utilisé cela dans cette méthode pour afficher des cellules.
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
Rappelez-vous ce code deux lignes bloque tout type de sélection ou d'une interaction à vos cellules, mais vous ne pouvez utiliser que la première ligne individuellement si vous voulez. C'est ...
cell.selectionStyle = UITableViewCellSelectionStyle .None
Seule cette ligne bloquera la sélection de vos cellules.
Cependant la deuxième ligne rendra la cellule "Read-Only". C'est ..
cell.userInteractionEnabled = false
Merci
Hope this aidé.
- 1. QTreeWidget désactiver la sélection
- 2. Comment désactiver: Glisser sur UITableViewCell le sélectionne
- 3. Rechargement de UITableViewCell sur la sélection
- 4. UITableViewCell écrasé lors de la sélection?
- 5. Comment changer la sélection bleue d'un UITableViewCell?
- 6. Rechargement d'un seul UITableViewCell sur un UITableview
- 7. Désactiver le multi-sélection?
- 8. couleur de sélection pour un UITableViewCell
- 9. désactiver la sélection de texte dans gwt
- 10. WPF Toolkit Datagrid - comment désactiver la sélection?
- 11. UIPickerView désactiver la sélection de ligne
- 12. comment désactiver la sélection automatique de MobileSafari?
- 13. Désactiver la sélection de texte UITextView
- 14. UITextView désactiver la sélection de texte
- 15. UITableViewCell setSelected, mais la sélection n'est pas affichée
- 16. La sélection UITableViewCell reste dans toutes les cellules!
- 17. jQuery datepicker, désactiver mois sélection
- 18. Désactiver la validation d'entrée pour un seul champ
- 19. Silverlight RichTextBox Désactiver la sélection de la souris
- 20. XPath et Sélection d'un seul nœud
- 21. Sélection d'un seul élément avec la requête linq2sql
- 22. Désactiver complètement la mise en surbrillance d'Android GridView (désactiver la sélection)
- 23. UITableViewCell image d'arrière-plan et problème de sélection
- 24. Auto-sélection des sous-classes UITableViewCell sous-classées
- 25. comment faire briller une sélection puis éteint dans uitableviewcell
- 26. Sélection d'une sous-vue dans un UITableViewCell personnalisé dans UITableView
- 27. L'arrière-plan UITableViewCell personnalisé devient transparent après sélection
- 28. combiner deux fonctions dans un UITableViewCell: sélection et informations
- 29. iPhone UITableViewCell avec UIWebView à l'intérieur: problème de sélection
- 30. Désactiver la fonctionnalité CheckBox à sélection multiple dans un ListView?
duplication possible de [UITableview: comment désactiver la sélection pour certaines lignes mais pas d'autres] (http://stackoverflow.com/questions/2267993/uitableview-how-to-disable-selection-for-some-rows-but -not-others) – JosephH