Par programmation en évidence UITableView cellule
J'ai une application iPad qui utilise un UISplitViewController (avec un UITableView sur la gauche et une vue de détail sur la droite). Ma table et voir les points saillants de la cellule sélectionnée en bleu lorsque vous appuyez sur elle.
Lorsque j'appelle la méthode suivante, la cellule est sélectionnée, mais pas en bleu:
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
J'ai passé littéralement jours besoin de se battre avec différents délégué des méthodes et des hacks essayer d'obtenir de la cellule à mettre en évidence par programmation comme si elle avait été exploité. Je ne peux pas le faire.
J'ai réussi à presque y arriver avec cette:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (shouldHighlightCell)
{
NSIndexPath *indexPathForCellToHighlight = [NSIndexPath indexPathForRow:0 inSection:0];
if ([indexPath isEqual:indexPathForCellToHighlight])
{
cell.selected = YES;
shouldHighlightCell = NO;
}
}
}
Il fonctionne aussi longtemps que j'ai aussi ce (sinon, il reste sélectionné, même quand une autre cellule est taraudé):
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
if ([[self.tableView cellForRowAtIndexPath:ip] isSelected])
{
[[self.tableView cellForRowAtIndexPath:ip] setSelected:NO];
}
NSIndexPath *iToTheP = indexPath;
return iToTheP;
}
Je sais que c'est bizarre et compliquée solution de contournement. Je ne me dérangerait pas, mais il ne fonctionne même pas entièrement. La cellule sélectionnée perd de son évidence, si il est déjà sorti de l'écran, tandis qu'une cellule qui a été tapé reste en surbrillance lorsque défilé hors de l'écran.
Je suis absolument sidéré par cette. Je suis sûr que cette solution de contournement ne devrait même pas être nécessaire, qu'il y a une solution beaucoup plus simple.
- Avez-vous essayé d'utiliser le
setHighlighted:animated:
méthode deUITableViewCell
? (Aussi, dans le code que vous indiquez ici, vous n'avez pas de montrer comment vous êtes effectivement en faisant ressortir. C'est à dire. ce qui se passe lorsque vous définissezshouldHighlightCell
?) - Vous n'écrivez, que la cellule est sélectionnée, mais pas mis en évidence après cet appel. Comment voulez-vous vérifier?
- Je sais que la cellule est sélectionnée en raison de sa vue de détail est affiché sur la droite de mon avis divergent.
- Merci. J'ai essayé setHighlighted:animation:
- shouldHighlightCell est défini à OUI quand j'ai créer la nouvelle cellule et de l'ajouter en haut de l'affichage de la table. C'est pourquoi je veux qu'il souligné, parce que la nouvelle cellule est automatiquement sélectionné et la vue de détail affiché sur la droite.
- Le hack fonctionne mieux quand je bouge shouldHighlightCell = AUCUN; à tableView:didSelectRowAtIndexPath:. Cela permet de maintenir les cellules en surbrillance, même lors d'un défilement de l'écran, mais supprime le point culminant chaque fois qu'une autre cellule est exploité. Le hack est en train de faire un ok maintenant. Mais je perds ma cellule sélectionnée chaque fois que je recharge le contenu de la vue de la table de la banque de données. Peut-être que j'ai besoin de réécrire la question!
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît être sûr de la cellule
selectionStyle
estUITableViewCellSelectionStyleBlue
et la tableView deallowsSelection
est fixé àYES
.La méthode
selectRowAtIndexPath:animated:scrollPosition:
fonctionne très bien pour moi. Elle met en évidence la cellule sélectionnée.J'ai essayé également de nombreuses approches pour obtenir de la sélection initiale à l'affichage sur mon single-sélection UITableView. Ce qui a finalement fonctionné pour moi a été de reporter la sélection de la première ligne jusqu'à ce que le tableau a été mis en place par l'appelant dans mon UITableViewController de viewDidAppear:
Je suis allé à travers et essayé toutes ces solutions, et d'autres, et pas de joie. Dans mon cas, le problème (qui m'ont rendu fou pendant 2 heures) a été le suivant peu de temps après j'ai été appeler
selectRowAtIndexPath
, j'ai été appelerreloadData
sur letableview
. Que recharger était en essuyant toutes les mettant en lumière! Méfiez-vous de ce piège! Avec la inutile de rechargement de l'appel de données disparu, la mise en évidence happenned comme prévu.J'ai trouvé et ça marche pour moi (aka l'appel de la méthode du délégué didSelectRowAtIndexPath)
PS. Je suis en utilisant UITableViewController.
J'ai trouvé ceci pour être complètement irrécupérable à l'aide de tous connu des possibilités. En fin de compte je l'ai fixée par amerrissage forcé beaucoup de mon code et de passer à NSFetchedResultsController à la place. NSFetchedResultsController a été introduite peu de temps après le départ, j'avais écrit cette application, et il simplifie grandement le processus d'utilisation de la Base de Données avec UITableViews.
https://developer.apple.com/library/IOs/documentation/CoreData/Reference/NSFetchedResultsController_Class/index.html
Il obtient le backgroundview avec la cellule frontière à la recherche comme élément de séparation.Ne modifiez pas la valeur par défaut tableview paramètres dans Interface builder.Assurez-vous que UITableViewCellSelectionStyleNone n'est PAS définie à selectionstyle. Je suis coller le code de travail. :