我有一些自定义UITableViewCell的问题以及如何使用故事板管理事物.当我将样式代码放在initWithCoder中时:它不起作用,但如果我把它放在tableView:cellForRowAtIndexPath中:它可以工作.在storyboard中我有一个原型单元格,其class属性设置为我的UITableViewCell自定义类.现在initWithCoder中的代码被调用了.
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; }
我调试了代码并发现首先调用了dequeue …然后它进入initWithCoder:然后返回到视图控制器代码.奇怪的是,记忆中细胞的地址在返回自我之间变化;当它回到控制器.如果我在出列后将样式代码移回视图控制器……一切正常.只是我不想在重复使用单元格时做不必要的样式.
干杯