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 de UITableViewCell? (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éfinissez shouldHighlightCell?)
  • 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!

InformationsquelleAutor beev | 2013-02-23