2011-03-18 2 views
3

Selon this question (et beaucoup de nombreux résultats de recherche Google), lorsque nous sommes dans une vue de table, et nous avons défini les cellules pour avoir UITableViewCellStyleSubtitle, nous avons été obligés d'aligner nos textes à l'intérieur de l'étiquette de la cellule pour être sur la gauche.Une solution de contournement pour centrer textAlignment dans UITableViewCellStyleSubtitle

Cependant, je veux une des lignes (en fait la ligne) de mon point de vue de la table pour être aligné centre ... Il est évident que cela ne fonctionnerait pas:

cell.textLabel.textAlignment = UITextAlignmentCenter; 

J'ai pensé ce que je devrait faire plutôt ... Je ne suis pas sûr de savoir comment le faire proprement. La meilleure façon dont je peux penser est de changer cette cellule particulière de sorte que le style de la cellule est UITableViewCellStyleDefault, mais je ne pense pas que la propriété de la cellule est modifiable. Une autre façon que je peux penser est de sous-classer la classe UITableViewCell, mais cela semble être un peu exagéré juste pour une cellule de table. Que pensez-vous que je devrais faire pour aligner cette dernière rangée?

EDIT: pour ceux d'entre vous qui sont intéressés par la réponse:

static NSString *CellIdentifier = @"Cell"; 
static NSString *CellIdentifierDefault = @"CellDefault"; 

UITableViewCell *cell; // = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (indexPath.row >= [data count]) 
     cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifierDefault]; 
    else 
     cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil && indexPath.row < [data count]) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    else if(cell == nil && indexPath.row >= [data count]) { 
     //Use default style for the last cell. 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierDefault] autorelease]; 
    } 
+0

Je pense que vous devriez simplement faire la dernière cellule 'UITableViewCellStyleDefault'.C'est beaucoup plus facile que tout ce que vous avez mentionné ci-dessus. – Robin

+0

Mais j'ai besoin des sous-titres ... Comment afficher text.detailTextLabel si j'utilise le style par défaut? –

+0

vous devez le faire seulement pour la dernière rangée pas pour les autres rangées. (Comme vous l'avez demandé dans votre question.) – Robin

Répondre

2

@the_great_monkey:

Vous pouvez modifier le cellIdentifier pour la cellule où vous voulez cet alignement central.

Pour les autres cellules, vous devez garder un cellIdentifier commun.

Puis, quand vous faites cela

cell.textLabel.textAlignment = UITextAlignmentCenter; 
cell.detailTextLabel.textAlignment = UITextAlignmentCenter; 

Ensuite, il suffit que vous devez vérifier si cellIdentifier est celui de la cellule qui nécessite un alignement central?

Si oui, appliquer,

cell.textLabel.textAlignment = UITextAlignmentCenter; et cell.detailTextLabel.textAlignment = UITextAlignmentCenter; pour cette cellule.

J'espère que cela vous aide.

+0

Comment vérifier le cellIdentifier pour une cellule? J'ai essayé si (cell.cellIdentifier == cellSubtitle) mais cela ne fonctionne pas ... –

+0

Nevermind. Je l'ai! Merci! –

+0

@the_great_monkey: De rien. Désolé n'a pas répondu à votre premier commentaire car n'était pas disponible en ligne. Mais je suis content que ça t'a aidé !! :-) –

0

Il est facile de charger une cellule à partir d'un .xib, ce qui vous permet d'organiser les sous-vues de la cellule comme vous le souhaitez. Malheureusement, les propriétés textLabel et detailTextLabel de UITableViewCell ne sont pas des IBOutlets, donc vous ne pouvez pas connecter les étiquettes que vous souhaitez utiliser pour ces propriétés dans IB. Une façon de gérer cela est de connecter ces vues aux prises de votre contrôleur et de les utiliser lorsque vous configurez la cellule dans -tableView: cellForRowAtIndexPath :. C'est très bien si vous n'avez pas besoin de changer le contenu de la cellule plus tard. Dans ce cas, vous pouvez simplement créer une plume contenant un UITableViewCell, définir le type de propriétaire du fichier pour correspondre à votre contrôleur, et configurer les sous-vues de la cellule comme bon vous semble et les connecter au propriétaire du fichier. Voir Loading Custom TableView Cells from Nib Files pour plus d'informations. L'autre façon d'aller est de créer une sous-classe UITableViewCell qui a des sorties pour l'étiquette de texte et l'étiquette de détail. Faites ensuite la même chose que ci-dessus, mais utilisez votre sous-classe plutôt que UITableViewCell. Une fois que vous avez créé cette sous-classe, vous pouvez l'utiliser avec différents .xibs si vous voulez des mises en page différentes à un moment donné. Le travail nécessaire pour créer la sous-classe est minime et devient un outil utile et réutilisable.

0
cell.textLabel.textAlignment=UITextBorderStyleLine; 
Questions connexes