ios – 在initWithCoder中定制自定义UITableViewCell:不工作

ios – 在initWithCoder中定制自定义UITableViewCell:不工作,第1张

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

干杯

解决方法 在单元格上调用initWithCoder:之后,将创建单元格并设置其属性.但是,单元格上的XIB(IBOutlets)中的关系尚未完成.因此,当您尝试使用mainLabel时,它是一个零引用.

将样式代码移动到awakeFromNib方法.在解压缩XIB之后,在创建单元并完全配置单元后调用此方法.

总结

以上是内存溢出为你收集整理的ios – 在initWithCoder中定制自定义UITableViewCell:不工作全部内容,希望文章能够帮你解决ios – 在initWithCoder中定制自定义UITableViewCell:不工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1101345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存