2

当在特定于表格视图单元格的背景中处理某些数据时,我想将表格视图单元格的视图置于半透明模式,并将一个进度在表格视图单元格顶部的指示器视图。在表格视图单元格顶部显示指示器视图

我尝试下面的代码,但没有活动的指标显示:

-(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]; 
} 

什么是错我的代码?什么是更好的实现方式?我怎样才能在覆盖表格视图单元格的半透明视图中显示指标视图?

谢谢!

回答

2

从它的外观来看,你永远不会将你创建的UIView添加到你的单元格中。您可能要做到以下几点:

[cell.contentView addSubview:view]; 

此外,您可能想改变你添加到你的东西比实际的电池不同视图的框架。这将允许您在UITableView内滚动而不会影响您设置的工作人员视图。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.contentView.frame.size.width, cell.contentView.frame.size.height)]; 

为了使视图半透明:

[view setOpaque:YES]; 
[view setBackgroundColor:[UIColor colorWithWhite:1.0 alpha:0.5]]; 
+0

我确实忘记将子视图添加到内容视图。谢谢你指点我这个错误!另外,我没有将活动指示器颜色设置为与白色不同的颜色。由于我的背景是白色的,指示器视图不可见。 – AlexR

+0

请阅读@ dasblinkenlight的回答。他有一个非常有用的观点。你仍然需要我在答案中放入的东西,以便按照你想要的方式工作。 –

+0

我用这两个答案来解决我的问题,现在效果很好。在显示指标视图时,您是否有任何关于如何使视图变为半透明的建议? – AlexR

3

一般来说,这不是一个好主意,惹周围UITableViewCell对象由来自外部的UITableView拥有,因为细胞是你在滚动屏幕后可能会得到回收,因此即使添加活动指示符,它也可能会被删除。

更好的方法是让您的cellForRowAtIndexPath:处理活动指示器的添加和删除。为此,您的模型需要保持活动指标应显示在其上的索引路径的注册表(“注册表”可以像单个变量一样简单,如果您从不同时打开多个单元格上的活动指示符) 。 cellForRowAtIndexPath应该读取该注册表,并相应地修饰该单元格。如果要添加活动指示器,请将相应的索引路径添加到注册表中,然后在表视图上调用reloadRowsAtIndexPaths:withRowAnimation:。当您需要关闭活动指示器时,从注册表中删除单元格的索引路径,然后重新加载该行。

本质上,模型需要成为国家的守护者。所有与改变UIView子类有关的事情都需要在tableView:cellForRowAtIndexPath:中发生。最后,当国家需要改变时,控制器应该让你的桌面视图“轻拍在肩上”。

+0

感谢您将代码放入'cellForRowAtIndexPath'并使用单独的'NSArray?注册应该显示指示器视图的表格视图单元格的索引路径。结合Simon在他的回答中给我的提示,我得到了这个工作。在显示指标视图时,您是否有任何关于如何使视图变为半透明的建议? – AlexR

+0

@AlexR查看[此问题](http://stackoverflow.com/q/7123118/335858),了解如何使单元变为半透明。请注意单元格透明度,因为它可能会显着降低表格的滚动速度。 – dasblinkenlight

相关问题