2010-08-12 17 views
58

Ich bin ein bisschen neu in Objective-C und iPhone Entwicklung und ich habe ein Problem beim Versuch, den Text in einer Tabellenzelle zu zentrieren. Ich habe google gesucht, aber die Lösungen sind für einen alten SDK-Fehler, der behoben wurde und diese funktionieren nicht für mich.Center Ausrichten von Text in UITableViewCell Problem

Einige Code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = @"Please center me"; 
    cell.textLabel.textAlignment = UITextAlignmentCenter; 
    return cell; 
} 

Die oben den Text nicht zentriert.

Ich habe auch versucht, die willDisplayCell Methode:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell.textLabel.textAlignment = UITextAlignmentCenter; 
} 

und ich habe einige der alten geschrieben Lösungen versucht:

UILabel* label = [[[cell contentView] subviews] objectAtIndex:0]; 
label.textAlignment = UITextAlignmentCenter; 
return cell; 

Keine von diesen auf der Textausrichtung keine Wirkung. Ich habe keine Idee mehr, jede Hilfe wäre sehr geschätzt.

Prost im Voraus.

+11

UITextAlignment in iOS 6.0 ist veraltet, es ist jetzt NSTextAlignment – Souljacker

Antwort

120

Sie wissen nicht, ob es Ihr spezielles Problem hilft, aber UITextAlignmentCenter wenn Sie initWithStyle:UITableViewCellStyleDefault

+4

Dies trug dazu bei, wie ich nicht für die Zellen des subtil ich mit zum Zentrum wollte. Vielen Dank. Ich denke, UITextAlignmentCenter funktioniert nicht für UITableViewCellStyleSubtitle-Zellen. – Magpie

+2

'UITextAlignmentCenter' ist jetzt veraltet. Sehen Sie [diesen Beitrag] (http://stackoverflow.com/a/12793054/2521004) für eine gute Alternative. –

+2

PERFEKT. Jemand bei Apple sollte entlassen werden, indem er uns Fehlermeldungen gibt, die nicht erklären, wie man Probleme löst. Wenn es nicht Stackoverflow und Leute wie Sie wären, wären wir alle verschraubt. – SpaceDog

4

Dieser Hack wird den Text zentrieren, wenn mit UITableViewCellStyleSubtitle verwenden funktioniert. Laden Sie beide Textbeschriftungen mit Ihren Zeichenfolgen, und führen Sie dann vor dem Zurückgeben der Zelle das aus. Es könnte einfacher sein, nur Ihre eigenen UILabels zu jeder Zelle hinzufügen, aber ich war eine andere Art und Weise zu finden, bestimmt ...

// UITableViewCellStyleSubtitle measured font sizes: 18 bold, 14 normal 

UIFont *font = [UIFont boldSystemFontOfSize:18]; // measured after the cell is rendered 
CGSize size = [cell.textLabel.text sizeWithFont:font]; 
CGSize spaceSize = [@" " sizeWithFont:font]; 
float excess_width = (cell.frame.size.width - 16) - size.width; 
if (cell.textLabel.text && spaceSize.width > 0 && excess_width > 0) { // sanity 
    int spaces_needed = (excess_width/2.0)/spaceSize.width; 
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0]; 
    cell.textLabel.text = [pad stringByAppendingString:cell.textLabel.text]; // center the text 
} 

font = [UIFont systemFontOfSize:14]; // detail, measured 
size = [cell.detailTextLabel.text sizeWithFont:font]; 
spaceSize = [@" " sizeWithFont:font]; 
excess_width = (cell.frame.size.width - 16) - size.width; 
if (cell.detailTextLabel.text && spaceSize.width > 0 && excess_width > 0) { // sanity 
    int spaces_needed = (excess_width/2.0)/spaceSize.width; 
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0]; 
    cell.detailTextLabel.text = [pad stringByAppendingString:cell.detailTextLabel.text]; // center the text 
} 
+1

funktionierte nicht für mich – marciokoko

15

Es funktioniert nicht, weil die textLabel nur so breit ist, wie es für sein muss beliebiger Text (UITableViewCell verschiebt die Beschriftungen nach Belieben, wenn sie auf UITableViewCellStyleSubtitle eingestellt sind)

Sie können layoutSubviews überschreiben, um sicherzustellen, dass die Beschriftungen immer die gesamte Breite der Zelle ausfüllen.

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.frame.size.width, self.textLabel.frame.size.height); 
    self.detailTextLabel.frame = CGRectMake(0, self.detailTextLabel.frame.origin.y, self.frame.size.width, self.detailTextLabel.frame.size.height); 
} 

Seien Sie sicher, dass das gleiche, die Höhe/y-Position zu halten, denn solange der Text detailTextLabel ist leer textLabel wird vertikal zentriert werden.

+0

Diese Zeilen kombiniert mit: 'self.detailTextLabel.textAlignment = UITextAlignmentRight;' und 'self.textLabel.textAlignment = UITextAlignmentRight;' Hat _exactly_ das, was ich suchte und erlaubte mir weiter mit dem UITableViewCellStyleSubtitle. –

0

In CustomTableViewCell.m:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.contentView.frame.size.width, self.textLabel.frame.size.height); 

} 

In der Methodentabelle:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
    cell = [[[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = @"Title"; 
    cell.textLabel.textAlignment = UITextAlignmentCenter; 

    return cell; 
} 

Bei Bedarf kann die gleiche Sache für self.detailTextLabel

0

In derselben Situation wiederholt werden, ich benutzerdefiniertes UITableViewCell mit einem erstellt benutzerdefiniertes Etikett:

MCCenterText Cell.h-Datei:

#import <UIKit/UIKit.h> 

@interface MCCenterTextCell : UITableViewCell 

@property (nonatomic, strong) UILabel *mainLabel; 

@end 

MCCenterTextCell.m-Datei:

#import "MCCenterTextCell.h" 


@interface MCCenterTextCell() 


@end 


@implementation MCCenterTextCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 

     self.accessoryType = UITableViewCellAccessoryNone; 
     self.selectionStyle = UITableViewCellSelectionStyleGray; 
     _mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 320, 30)]; 
     _mainLabel.font = BOLD_FONT(13); 
     _mainLabel.textAlignment = NSTextAlignmentCenter; 
     [self.contentView addSubview:_mainLabel]; 

    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 


@end 
3

Mit diesem Code:

cell.textLabel.textAlignment = NSTextAlignmentCenter; 

Above Code funktioniert. Verwenden Sie UITextAlignmentCenter nicht, es ist veraltet.

+0

In der Tat funktioniert das - danke! –

0

Sie Code verwenden, könnten Text zum Zentrum

cell.indentationLevel = 1;

cell.indentationWidth = [UIScreen Hauptbildschirm] .bounds.size.width/2-10;

0

Falls jemand den Text nach rechts ausrichten möchte, habe ich die Lösung erfolgreich beschrieben here.

cell.transform = CGAffineTransformMakeScale(-1.0, 1.0); 
cell.textLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0); 
cell.detailTextLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);