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:然后返回到视图控制器代码.奇怪的是,记忆中细胞的地址在返回自我之间变化;当它回到控制器.如果我在出列后将样式代码移回视图控制器……一切正常.只是我不想在重复使用单元格时做不必要的样式.
干杯
解决方法 在单元格上调用initWithCoder:之后,将创建单元格并设置其属性.但是,单元格上的XIB(IBOutlets)中的关系尚未完成.因此,当您尝试使用mainLabel时,它是一个零引用.将样式代码移动到awakeFromNib方法.在解压缩XIB之后,在创建单元并完全配置单元后调用此方法.
总结以上是内存溢出为你收集整理的ios – 在initWithCoder中定制自定义UITableViewCell:不工作全部内容,希望文章能够帮你解决ios – 在initWithCoder中定制自定义UITableViewCell:不工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)