多变的uitableView
在ios的开发中,uitableView是常用的控件,在开发的过程中,也在慢慢的总结,下面是我两年来不段的探索总结出来的一套方案,希望对大家有所帮助。
先从组织数据开始 个人建议在先组织好数据,这个数据不但包括NSstring等类型数据,还包括控件数据,比如头像,比如lable,一般的做法,我们是在填充cell的时候进行赋值,但是如果一个cell承载了太多的控件的话,就会引起tableview滑动卡屏,用户体验会严重下降,如果我们把所需的控件先组织好,到里面赋值控件的话,会大大优化cell的性能,当然这在一定程度上会在组织数据的时候影响性能。不说了 上代码
OHAttributedLabel * lable = [self creatLableforText:textString];
NSNumber *heightNum = [[NSNumber alloc] initWithFloat:lable.frame.size.height];
[lableArray addObject:lable];
我们在初始化数组的时候,就创建好lable,当在cell中获取的时候,直接就能取到lable
OHAttributedLabel * la = [lableArray objectAtIndex:indexPath.row];
la.frame=CGRectMake(20, 14, la.frame.size.width, la.frame.size.height);
[cell.imageViewBtn addSubview:la];
这样在创建一些比较耗内存的控件的时候,就能大大提升cell性能
注:如果你的程序的cell用普通的方法在很古老的ios设备上滑着都很顺畅,那么就没必要用上面的方法了。 - 数据完成,下面就是对于cell的定制了。一般我们很少会用到苹果默认的两种cell样式来满足我们的要求,这就需要我们自定义cell了,一般的自定义cell,我们会定义好控件,放到cell上,然后在填充cell的时候,对cell上的控件重新赋值和设置间距,这样看起来是没有什么问题的,但是,整个代码看起来总不是那么的美观,而且每次复用cell的时候,我们需要把cell上的控件位置重新设置一遍,其实我们可以在cell内部来确定控件的位置,我们只需暴漏出来lable的字符串接口即可
我们可以通过重写msgString的方法,来实现对msgLable的控制,包括它的任何属性,我们可以通过如下的方法调用setmsgString
头文件
@property(nonatomic,retain)NSString * msgString;
- (void)setMsgString:(NSString *)msgString;
- (NSString*)msgString;
源文件
- (void)setMsgString:(NSString *)msgString
{
if(_msgString != msgString)
{
[_msgString release];
_msgString = [msgString retain];
}
_msgLable.text = _msgString;
_msgLable.frame = CGRectMake(58, 30, SCREEN_WIDTH-85, self.msgHeightCell+1);
}
- (NSString*)msgString
{
return _msgString;
}
oneData.msgString = oneCircle.msgContent;
这样在整个cell里面,代码看着就会十分整洁,在下次重用这个cell的时候,就会省很多力气 - 网上也有很多优化cell的东西,相信大部分人都能搜索到很多,上面是我自己总结的两个 网上的很多我给大家整理出来
优化cell性能(网易博客)http://blog.163.com/cguess@126/blog/static/17254908120117691358952/
对cell进行性能优化(道客巴巴) http://www.doc88.com/p-7184318039005.html
IOS详解tableview (csdn)http://blog.csdn.net/cocoarannie/article/details/11183067
以上都是我收藏的文章,有些营养不多,或者类似的文章看过就丢失了希望对你有帮助 - 下章分析代理和通知的优劣 望支持(我就是小伟哥出品) http://blog.csdn.net/zhhwww12/article/details/19118955