当在后台处理特定于 TableView 单元格的某些数据时,我想将 TableView 单元格的 View 置于半透明模式,并将进度指示器 View 放在 TableView 单元格的顶部。
我尝试了以下代码,但没有显示事件指示器:
-(void)showActivityIndicatorInTableView:(UITableView*)tableView
atIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:cell.contentView.frame];
view.tag = 50;
UIActivityIndicatorView *ac = [[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
CGRect frame = view.frame;
ac.center = CGPointMake(frame.size.width/2, frame.size.height/2);
[view addSubview:ac];
[ac startAnimating];
}
我的代码有什么问题吗?实现这一点的更好方法是什么?如何在覆盖表格 View 单元格的半透明 View 中显示指示器 View ?
谢谢!
最佳答案
一般来说,从外部搞乱 UITableView
拥有的 UITableViewCell
对象并不是一个好主意,因为您要获取的单元格可能会滚动离开屏幕后会被回收,因此即使您添加事件指示器,它也可能会被删除。
更好的方法是让您的 cellForRowAtIndexPath:
处理事件指示器的添加和删除。为此,您的模型需要保留应显示事件指示器的索引路径注册表(如果您从不同时打开多个单元格上的事件指示器,则“注册表”可以像单个变量一样简单) 。 cellForRowAtIndexPath 应该读取该注册表,并相应地装饰单元格。当您想要添加事件指示器时,请将相应的索引路径添加到注册表中,并在 TableView 上调用reloadRowsAtIndexPaths:withRowAnimation:
。当您需要关闭事件指示器时,从注册表中删除该单元格的索引路径,然后再次重新加载该行。
本质上,模型需要成为状态的守护者。与更改 UIView
子类有关的所有操作都需要在 tableView:cellForRowAtIndexPath:
中进行。最后,当状态需要改变时, Controller 应该给你的 TableView “轻拍一下肩膀”。
关于ios - 在表格 View 单元格顶部显示指示器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628709/