今天在tableview中加入自定义的cell。通过继承uitableviewcell类,实现自定义的cell。新建类,新建nib资源,加入控件,调好布局。编译运行,数据出来了,需要的布局也实现了。但有一个问题却出现了。tableview中没有分割线和右侧的箭头了。奇怪了,在cell中明明已经定义了的,也设置了
cell的accessoryType
为 UITableViewCellAccessoryDisclosureIndicator。分割线也没有使用代码去掉的。反复检查了设置,在cell中加入view,再将label等控件布局全部放在加入的view中,重新运行,还是没能解决。对比之前写过的cell,设置,控件等都一样,为什么就不显示了?很是郁闷阿,就这样捣弄了快一个小时,人都几乎发疯了,就是百思不得其解,百试无得其法。shit。难道xcode4.2的storyboard跟之前的xib不一样?
......
继续抓狂了好久,遇到问题解决不了真是痛苦阿!!!
后来做最后一次尝试,打算试了不行就睡觉。将cell的view隐藏,运行后还是没能看到分割线和右侧的箭头,这次可以断定是自定义的cell的问题了,而不是cell中view或者其他控件尺寸不对挡住了分割线或者箭头。再作最后的垂死挣扎,再不行就睡觉,看到时钟已经过了1点了,我宝贵的睡眠时间就在着痛苦的折磨中白白耗掉了1个多小时。
最后的尝试是:将新定义的cell用之前定义的一个cell替代,编译运行,fuck,我狠狠地说了声,一切正常,分割线和右侧的箭头很分明的摆在眼前。这下感觉有希望了。看看两个自定义cell的代码有啥不同,之前一直是比较资源,发现没什么不同的地方。这次比较代码,发现新定义的cell类中多实现了以下这个函数:
- (void)layoutSubviews
{
}
这是自定义的cell类继承了UITableViewCell的函数。将其注释。编译运行。靠,这次好好的,完全没问题了。
这下知道问题所在了,原来继承了父类的函数,但函数没加自己的实现函数,所以导致了问题的出现。将这个函数注释或者改称以下都没问题:
- (void)layoutSubviews
{
[super layoutSubviews];
}
这是因为调用了父类的实现方式,所以保证了函数正常的运行。
这次的教训就是,不需要用到的函数不要轻易继承,就算继承了也要搞清楚是否需要调用父类的实现函数,如果继承了函数而又不调用父类的实现,那后果就很严重了。往往会出现你意想不到的问题。
此次教训,切记切记。