2010-09-16 4 views
2

Je crée un UITableViewCell personnalisé, de style similaire à UITableViewCellStyleValue1 mais avec un champ de texte modifiable sur le côté droit au lieu du detailTextLabel. Je suis un peu confus sur la façon de dimensionner le champ d'édition correctement. Je veux prendre en compte la longueur du textLabel, ainsi que la taille du contentView, et être capable de faire le bon choix quand sa vue de table est en mode édition, ou si une vue accessoire (comme une flèche de divulgation) est ajoutée.Mise en page sous-vue UITableViewCell personnalisée

Mais la largeur du contentView semble toujours être de 320 (sur iPhone en mode portrait) même pour une table groupée. Dans ma sous-classe UITableViewCell, je ne vois aucun moyen d'accéder à la vue de table à laquelle elle appartient afin que je puisse obtenir le style de la table et ajuster les marges en conséquence. Je suppose que je peux gérer ceci de façon personnalisée dans la méthode déléguée -tableView:willDisplayCell:forRowAtIndexPath: de tableView, mais cela va complètement à l'encontre de l'objectif d'avoir une classe de cellules réutilisable.

Je dois manquer un concept clé ici, mais je suis à court de ressources. N'importe qui?

Merci! randy

Répondre

6

Vous pouvez prendre le contrôle de votre disposition dans votre sous-classe UITableViewCell. Par exemple:

- (void)layoutSubviews 
{ 
    CGRect b = [self bounds]; 
    b.size.width += 30; // allow extra width to slide for editing 
    b.origin.x -= (self.editing) ? 0 : 30; // start 30px left unless editing 
    [contentView setFrame:b]; 
    // then calculate (NSString sizeWithFont) and addSubView, the textField as appropriate... 
    // 
    [super layoutSubviews]; 
} 
+2

Il me manquait le [super layoutSubviews]; ça pré-dimensionné les choses pour moi. Merci, Jordan. – randallmeadows

0

Je pense que les marges font partie de la cellule, pas de la table, c'est pourquoi la largeur de contenu est toujours de 320. Peut-être que je ne comprends pas la question.

+0

Si la vue de table est de style brut, la cellule occupe visuellement toute la largeur de la table. Cependant, dans le style groupé, * visuellement *, il y a une marge de 10 pixels de chaque côté. À l'intérieur de la sous-classe de la cellule, comment puis-je déterminer s'il faut ou non utiliser cette marge supplémentaire de 10 pixels de chaque côté? – randallmeadows

+0

Oh, je ne suis pas sûr. Essayez de vérifier le 'indendationLevel' ou' indentationWidth', ils peuvent être différents sur grouped vs plain. – UltimateBrent

Questions connexes