Ich habe ein paar Probleme mit einem benutzerdefinierten UITableViewCell und wie man Dinge mit Storyboards verwalten. Wenn ich den Styling-Code in initWithCoder:
setze funktioniert es nicht, aber wenn ich es in tableView: cellForRowAtIndexPath:
stecke funktioniert es. Im Storyboard habe ich eine Prototyp-Zelle, deren Klassenattribut auf meine benutzerdefinierte Klasse UITableViewCell gesetzt ist. Jetzt wird der Code in initWithCoder:
aufgerufen.Styling benutzerdefinierte UITableViewCell in InitWithCoder: funktioniert nicht
SimoTableViewCell.m
@implementation SimoTableViewCell
@synthesize mainLabel, subLabel;
-(id) initWithCoder:(NSCoder *)aDecoder {
if (!(self = [super initWithCoder:aDecoder])) return nil;
[self styleCellBackground];
//style the labels
[self.mainLabel styleMainLabel];
[self.subLabel styleSubLabel];
return self;
}
@end
TableViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"NearbyLandmarksCell";
SimoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
//sets the text of the labels
id<SimoListItem> item = (id<SimoListItem>) [self.places objectAtIndex:[indexPath row]];
cell.mainLabel.text = [item mainString];
cell.subLabel.text = [item subString];
//move the labels so that they are centered horizontally
float mainXPos = (CGRectGetWidth(cell.contentView.frame)/2 - CGRectGetWidth(cell.mainLabel.frame)/2);
float subXPos = (CGRectGetWidth(cell.contentView.frame)/2 - CGRectGetWidth(cell.subLabel.frame)/2);
CGRect mainFrame = cell.mainLabel.frame;
mainFrame.origin.x = mainXPos;
cell.mainLabel.frame = mainFrame;
CGRect subFrame = cell.subLabel.frame;
subFrame.origin.x = subXPos;
cell.subLabel.frame = subFrame;
return cell;
}
ich den Code gedebuggt haben und festgestellt, dass die dequeue...
zuerst genannt wird, dann geht es in die initWithCoder:
und dann Zurück zum View-Controller-Code. Was merkwürdig ist, ist, dass die Adresse der Zelle im Speicher zwischen return self;
wechselt und wenn es zurück zum Controller geht. Und wenn ich den Styling-Code nach dequeue...
zurück zum View-Controller verschiebe, funktioniert alles einwandfrei. Ich möchte nicht unnötiges Styling bei der Wiederverwendung von Zellen machen.
Prost