通过标签访问UITableViewCell子视图?
问题描述:
我添加一个UIProgressView到表格单元格,如图所示:通过标签访问UITableViewCell子视图?
UITableViewCell *cell = [videosTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:(long)videoIndex inSection:0]];
UIProgressView *prg =[[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
prg.tag = (long)videoIndex + 1000;
[cell addSubview:prg];
我后来我(在AppDelegate.m)尝试使用访问此进度条下面:
UITableView *table = (UITableView *)[self.videosTableController.view viewWithTag:8888];
UITableViewCell *cell = [table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
UIProgressView *progressBar = (UIProgressView *)[cell viewWithTag:index+1000];
return progressBar; //this always is nil.....
这是怎么回事上?我已验证table
和cell
不返回零,但UIProgressView似乎不在单元格中。我浏览了单元格的子视图,但看不到进度条。
答
您应该设置prg.tag = (long)videoIndex + 1000;
在tableView:cellForRowAtIndexPath:
这是因为[table cellForRowAtIndexPath:]
可以从tableView:cellForRowAtIndexPath:
在某些情况下,返回一个新的细胞实例。
因此,您应该区分tableView:cellForRowAtIndexPath:
内需要的单元格(需要进展还是没有),创建一个合适的单元格并进行配置并返回。
你确定'videoIndex'和'index'是一样的吗? – Slayter 2014-10-28 14:39:01
你确定这不是一个细胞回收问题吗?我也建议你使用不正确的模式。而不是试图直接设置和更改单元格;对单元格显示属性的模型对象进行更改并让单元格从那里接受更改是一个更好的主意。看看你的描述 - 当你说你试图访问_AppDelegate_中的单元格 - 这本身就是一种代码味道。 – Anorak 2014-10-28 14:40:16
@Slayter - 是的,我已经证实他们是一样的。 – croceldon 2014-10-28 14:43:14