社区
iOS
帖子详情
请教由UITableViewCell的重绘机制导致的列状态问题解决办法
仙人掌
2012-01-29 04:50:55
情况是这样,我自定义了一个uitableviewcell封装类,里边有progressbar,那么在使用这个自定义cell列表时(有8条记录),每个cell都要显示事实的某类型进度.
默认初始化时是正常的,但当我纵向向下滑动,显示了下边的第八条cell之后,再向上滑动显示第一条时,该cell被重绘,回到了初始化时的状态,请问如何去解决呢?
...全文
1090
28
打赏
收藏
请教由UITableViewCell的重绘机制导致的列状态问题解决办法
情况是这样,我自定义了一个uitableviewcell封装类,里边有progressbar,那么在使用这个自定义cell列表时(有8条记录),每个cell都要显示事实的某类型进度. 默认初始化时是正常的,但当我纵向向下滑动,显示了下边的第八条cell之后,再向上滑动显示第一条时,该cell被重绘,回到了初始化时的状态,请问如何去解决呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
__Hadley
2012-08-03
打赏
举报
回复
上面的各位英雄的解决方案,好像都是将UITableViewCell中的复用机制给干掉了吧 我想哪样并不是长远之计。
一个项目中有100个UITableViewCell, 如果不用复用机制,那么内存吃得紧,可能崩溃喔 。那就必须要用了,那又该怎么样解决呢?
linux_fay
2012-03-28
打赏
举报
回复
[Quote=引用 19 楼 的回复:]
引用 9 楼 a21064346 的回复:
cellforindexth{
if(cell ==nil)
{
cell 创建
// 这部分注视掉
// 绘画 uiprogress
// progress。tag=x
// addsubview
}
///在这个地方处理,类似这样处理
else{
// 遍历所有cell.contentview,删除现在所有co……
[/Quote]
这段代码没用到重用 ,而是活生生的把重用机制给干掉了~
仙人掌
2012-02-07
打赏
举报
回复
问题已基本解决,还是tableview机制的问题,感谢各位.
逸学堂
2012-02-06
打赏
举报
回复
这个问题,参考这里
http://blog.csdn.net/ugg/article/details/7237902
逸学堂
2012-02-06
打赏
举报
回复
[Quote=引用 21 楼 yeefly 的回复:]
请问ugg ,cell的indexpath是固定的吗? 有可能我会在下载时删除其中的某个cell,这样的话indexpath准确吗还?
[/Quote]
没有问题,采用重用机制后,只是删除cell上的内容,cell本身并没有释放。所以,不用关心indexxpath问题。
给你附加上我之前项目的一段代码
static NSString *identifier = @"etuancell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
//cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}else{
// 删除cell中的子对象,这一段是避免刷新问题的。
while ([cell.contentView.subviews lastObject] != nil) {
[(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
}
}
这一段在cell上绘制内容
UILabel *nameLable = [[UILabel alloc] initWithFrame:CGRectMake(50, 196, 250, 50)];
NSString *shopName = [[NSString alloc] initWithFormat:@"[%@][%@] %@",[item1 shopname],[item1 area],[item1 name]];
nameLable.numberOfLines = 2;
[nameLable setText:shopName];
nameLable.textAlignment = UITextAlignmentLeft;
nameLable.backgroundColor = [UIColor clearColor];
[nameLable setFont:[UIFont fontWithName:@"Arial" size:20.0f]];
[cell.contentView addSubview:nameLable];
仙人掌
2012-02-06
打赏
举报
回复
[Quote=引用 22 楼 hslinux 的回复:]
是否可以尝试下在重绘的时候重新刷新列状态。
[/Quote]
现在就是在讨论如何恰当的完成状态刷新
hslinux
2012-02-06
打赏
举报
回复
是否可以尝试下在重绘的时候重新刷新列状态。
仙人掌
2012-02-06
打赏
举报
回复
请问ugg ,cell的indexpath是固定的吗? 有可能我会在下载时删除其中的某个cell,这样的话indexpath准确吗还?
逸学堂
2012-02-04
打赏
举报
回复
[Quote=引用 9 楼 a21064346 的回复:]
cellforindexth{
if(cell ==nil)
{
cell 创建
// 拿到外面去
// 绘画 uiprogress
// progress。tag=x
// addsubview
}else{
// 从这里删除cell.contentview的上对象,大概意思如下,具体代码自己再写下
for(UIView *view in cell.contentview){
[view removefromsuperview];
}
}
// 从这里开始绘制
绘画 uiprogress
progress。tag=x
addsubview
这里 开始设置一些具体的cell数值
}
你的问题我前段时间也碰到过。。。因为每次下拉或者上拉都会重新去绘画CELL,所以你需要对CELL进行一个判断。如果已经存在了,怎么……
[/Quote]
逸学堂
2012-02-04
打赏
举报
回复
[Quote=引用 9 楼 a21064346 的回复:]
cellforindexth{
if(cell ==nil)
{
cell 创建
// 这部分注视掉
// 绘画 uiprogress
// progress。tag=x
// addsubview
}
///在这个地方处理,类似这样处理
else{
// 遍历所有cell.contentview,删除现在所有contentview的内容。
for(UIView *temp in cell.contentview){
[temp removefromsuperview];
}
}
// 在这个地方绘制信息,添加cell内容
绘画 uiprogress
progress。tag=x
addsubview
这里 开始设置一些具体的cell数值
}
你的问题我前段时间也碰到过。。。因为每次下拉或者上拉都会重新去绘画CELL,所以你需要对CELL进行一个判断。如果已经存在了,怎么……
[/Quote]
仙人掌
2012-02-03
打赏
举报
回复
我把处理progressbar的代码写在自定义cell类里了,这应该是问题的原因吧?
yiyaoyao58958
2012-02-03
打赏
举报
回复
static NSString *imageCellIdentifier = @"imageCell";
...
cell = [tableView dequeueReusableCellWithIdentifier:imageCellIdentifier];
这种为复用
cell = [[[UserCellView alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:imageCellIdentifier] autorelease];
这种为不复用
疑问:
不知道楼主的progressbar初始化和绘制写在了自定义的UserCellView的哪里。
建议把自定义的UserCell的代码贴出来,问题应该是在那里面
相奇
2012-02-03
打赏
举报
回复
cellforindexth{
if(cell ==nil)
{
cell 创建
绘画 uiprogress
progress。tag=x
addsubview
}
这里 开始设置一些具体的cell数值
}
你的问题我前段时间也碰到过。。。因为每次下拉或者上拉都会重新去绘画CELL,所以你需要对CELL进行一个判断。如果已经存在了,怎么操作,不存在该怎么操作
xiuzhaoyang
2012-02-03
打赏
举报
回复
首先使用一个NsMutableArray 保存你的下载信息,档下载进度变化时通知当前的controller,并告诉变化的是哪一个下载,当前的controller调用
UITableViewCell* cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:path];
cell不为空的话即表示其显示在当前的tableiew中,直接修改cell的progressbar的值就行。
仙人掌
2012-02-03
打赏
举报
回复
reloadData我试过是可行的,但消耗会不会太大呢? 因为不是所有的cell都显示progressbar的,所以个别cell是不需要刷新的.
有progressbar的显示后也要即时刷新的.
相奇
2012-02-03
打赏
举报
回复
如果要 更新数据
那么CELL一定会重新绘画
新手认为,加在view里就可以,不过后面加一条语句[tableview reloaddata];要跟着计时器一起
好像是这么写的,让列表重新画一次就好了
仙人掌
2012-02-03
打赏
举报
回复
[Quote=引用 14 楼 yiyaoyao58958 的回复:]
那么处理没有问题,关键是处理的代码有没有问题。
同意楼上。
[/Quote]
如果是这样,那就需要用NSTimer来定时刷新状态是吧? 那么这个Timer写在view里合适呢?还是写在自定义cell里?
yiyaoyao58958
2012-02-03
打赏
举报
回复
[Quote=引用 11 楼 yeefly 的回复:]
我把处理progressbar的代码写在自定义cell类里了,这应该是问题的原因吧?
[/Quote]
那么处理没有问题,关键是处理的代码有没有问题。
同意楼上。
加菲兔子
2012-02-03
打赏
举报
回复
[Quote=引用 11 楼 yeefly 的回复:]
我把处理progressbar的代码写在自定义cell类里了,这应该是问题的原因吧?
[/Quote]
没有问题,只是你要在返回的cell函数里每次进行赋值。如果不赋值,那么就有可能之前用过cell对应数据的值。
加菲兔子
2012-02-03
打赏
举报
回复
复用可以有效减少内存。每次激活返回cell的函数,进行赋值。其实主要是对应表格的数据源里记录progressbar的进度即可。
加载更多回复(8)
UITableView
Cell
的标记、移动、删除、插入
http://blog.csdn.net/duxinfeng2010/article/category/1155790 有详细介绍
iOS 自定义
cell
添加UIButton按钮点击实现,代理跟代码块两种方式实现
iOS 自定义
UITableView
Cell
上添加UIButton按钮点击实现,知道点击了是哪个
cell
上的按钮。用代理跟代码块两种方式实现。
18个 ios 项目源代码
18个 ios 项目源代码 各种布局 控件使用 及扩展视图 自定义
UITableView
Cell
。实现各种样式的表格输入界面、自定义Tab Bar的文字、颜色和图片加箭头、
列
表个性化
列
表项、IOS欢迎界面等。
UITableView
Cell
的
重绘
机制
导致
的
列
状态
问题
问题
:
UITableView
Cell
的
重绘
机制
导致
的
列
状态
问题
环境:XCode4.2,低版本也会出现 场景:自定义
UITableView
Cell
,使用复用
cell
方法,在
UITableView
滚动时,内容被覆盖,或者没有被刷新,或者选择时内容覆盖,或者设置
cell
的背景透明时,内容重叠在一起,或者图片控件出现覆盖,显示不全等
问题
。 原因:引起这个
问题
的主要原因是,重用
cell
。之前ce
【转】
UITableView
Cell
的
重绘
机制
导致
的
列
状态
问题
问题
:
UITableView
Cell
的
重绘
机制
导致
的
列
状态
问题
环境:XCode4.2,低版本也会出现 场景:自定义
UITableView
Cell
,使用复用
cell
方法,在
UITableView
滚动时,内容被覆盖,或者没有被刷新,或者选择时内容覆盖,或者设置
cell
的背景透明时,内容重叠在一起,或者图片控件出现覆盖,显示不全等
问题
。 原因:引起这个
问题
的主要原因是,重用
cell
iOS
29,027
社区成员
12,466
社区内容
发帖
与我相关
我的任务
iOS
主要讨论与iOS相关的软件和技术
复制链接
扫一扫
分享
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章