折叠分组表格中重用Cell导致的问题

折叠分组表格中重用Cell导致的问题,第1张

概述问题描述: 在使用UITableView时,我们习惯在tableView:cellForRowAtIndexPath:方法中使用CocoaTouch提供的表格单元格缓存来重用单元格: static NSString* cellid=@"exTable_cellid"; UITableViewCell* cell=(UITableViewCell*)[tableView dequeueReusabl

问题描述:

在使用UItableVIEw时,我们习惯在tableVIEw:cellForRowAtIndexPath:方法中使用Cocoatouch提供的表格单元格缓存来重用单元格:

static Nsstring* cellID=@"extable_cellID";

UItableVIEwCell* cell=(UItableVIEwCell*)[tableVIEw

dequeueReusableCellWithIDentifIEr:cellID];

if (cell==nil) {

cell=[[[UItableVIEwCell alloc]

initWithStyle:UItableVIEwCellStyleDefault

reuseIDentifIEr:cellID]autorelease];

UILabel *lblname[[UILabel alloc]initWithFrame:

 CGRectMake(20,6,100,20)];

……

 

}

表面上看这没有任何问题。但对于可折叠分组的表格,则会导致一系列问题。原因在于Cocoa touch提供的单元格缓存无法识别不同的组(section),对它来说,第1个section的第1行,和第2个、第3个…第n个section的第1行都是一样的。于是,当你打开了第1个section后,再打开其他的section,会发现,所有的section的前面几行全都变成了第1个section中的内容,例如在一个折叠分组表格中,我们先打开一个section:

然后再打开其他的section,发现,所有的section下的第1行内容都变成了zhangsz:

既然问题提出了,让我们来看看解决的方法。

解决办法:

解决的办法有两个,一是不使用Cocoa touch的单元格缓存,即每次都重新构建UItableVIEwCell:

//这里不采用重用方式,每次刷新都重新构造cell。对于分组表格,重用cell会导致一些问题

// static Nsstring*cellID=@"extable_cellID";

UItableVIEwCell* cell=[[UItableVIEwCell alloc]initWithFrame:CGRectMake(0,self.frame.size.wIDth,rowHeight)];

UILabel *lblname[[UILabel alloc]initWithFrame:

 CGRectMake(20,20)];

……

这里我们采用了UItableVIEwCell的另外一个初始化方法来构建单元格,这个方法不需要传递reuseIndentifIEr参数,即不使用单元格缓存。这种方法简单有效,但由于每次刷新表格时都会重新构造单元格,与重用单元格缓存比较而言,会导致额外的性能开销。

第二种方法,是使用tag属性和vIEwWithTag方法。这种情况下可以使用单元格缓存,同时避免了前面所述问题的出现:

static Nsstring* cellID=@"extable_cellID";

UItableVIEwCell* cell=(UItableVIEwCell*)[tableVIEw

dequeueReusableCellWithIDentifIEr:cellID];

if (cell==nil) {

cell=[[[UItableVIEwCell alloc]

initWithStyle:UItableVIEwCellStyleDefault

reuseIDentifIEr:cellID]autorelease];

UILabel *lblname[[UILabel alloc]initWithFrame:

 CGRectMake(20,20)];

lblname.tag=1022;

[cell addSubVIEw:lblname];

……

}

lblname=[cellvIEwWithTag:1022];

lblname.text=… …

… …

 

聪明的你,是不是还想到了其他的办法呢?比如扩展自己的UITabelVIEwCell子类?

总结

以上是内存溢出为你收集整理的折叠分组表格中重用Cell导致的问题全部内容,希望文章能够帮你解决折叠分组表格中重用Cell导致的问题所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存