2011-04-05 5 views
5

Je veux une vue de table avec seulement des cellules, et quand vous cliquez sur une cellule elle devrait s'étendre et montrer plus d'information de la cellule cliquée.Cellule de vue de table extensible iOS

J'ai vu pas mal de sujets à ce sujet, mais la plupart d'entre eux sont liés à Table View Animations and Gestures sur la page Apple Developer. Qui le fait d'une manière différente. Ils utilisent des sections d'en-tête, mais je veux utiliser la cellule qui est extensible pour des raisons de mise en page.

je l'ai déjà essayé plusieurs choses principalement

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  

    if (isSearching && indexPath.row == selectedIndex) { 
     return 110; 
    } 
    else { 
     return rowHeight;  
    } 

Lorsque je clique sur la cellule, la cellule est étendue, mais l'information dans cette cellule reste le même. Aussi la hauteur de la cellule lorsqu'elle est développée devrait être liée à la quantité de texte dans les détails.

Thnx!

+0

Avez-vous implémenté layoutSubviews ou utilisé autoresizingMask dans la cellule? – David

+0

non? Ai-je besoin de faire ça? – peter

+0

oui, le contenu de la cellule n'est pas redimensionné automatiquement. Si vous changez sa hauteur, cela n'aura pas automatiquement d'effet sur ses sous-vues. Si un autoresizingMask est défini, les sous-vues seront redimensionnées en conséquence. Si le paramètre autoresizingMask n'est pas suffisant, vous pouvez remplacer layoutSubviews pour redimensionner les sous-vues par programme. – David

Répondre

9

Vous pouvez y parvenir en utilisant des cellules personnalisées. Créez deux cellules personnalisées, une pour la ligne normale et l'autre pour la ligne développée. Lorsque l'utilisateur touche une cellule particulière, vous pouvez enregistrer indexPath et recharger la tableView. Pendant le rechargement, vous pouvez modifier la hauteur de la ligne sélectionnée en utilisant le code que vous venez de publier (en augmentant la hauteur de la seule cellule sélectionnée). Cela donnerait un effet de cellule en expansion.

+0

didSelectRowAtIndexPath serait appelé pour la cellule sélectionnée. Vous pouvez mettre en place un drapeau ici, qui peut être référé à nouveau par les méthodes UITableViewDatSource, quand un [tableView reloadData] est fait. – Vin

+0

De quelle façon le code sait quelle cellule personnalisée doit être sélectionnée? Est-ce que je déclare cela dans le didSelectRowAtIndexPath? Et sur quel chemin? – peter

+0

lorsque cellForRowAtIndexPath est à nouveau appelé après rechargement de table, vous pouvez vérifier, en utilisant l'indicateur pour quelle cellule il a été appelé. Vous pouvez ensuite redessiner la cellule avec une nouvelle cellule personnalisée, en laissant les autres comme avant. – Vin

Questions connexes