2013-08-01 58 views
0

我有一个tableview用于显示从Web服务加载的数据。有时它加载速度很快,有时需要一段时间。加载时,tableview只显示一个空白屏幕(在我的情况下,它是一个灰色的屏幕)。我想在桌面视图背景视图中显示一个简单的图片,其中显示加载并有一个加载图标,我将动画旋转,但我无法完全显示它。这里是我的代码:iOS将图像添加到Tableview背景视图

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
[backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 
[backgroundView addSubview:self.tableLoading]; 

[self.feedTableView setBackgroundView:backgroundView]; 

背景视图显示为预期的,因此,灰色的背景,但我不能让图像显示在所有。

有什么建议吗?这似乎是一个简单的问题,但我已经花了很长时间没有成功。提前致谢!

+0

我不认为展示一个后台加载是一个实现代码如下良好的用户体验,当内容是在前面。该图像多长时间加载一次。也许隐藏桌面视图直到图像准备好了? –

+0

这个想法是只显示加载时没有数据的表视图。最好隐藏tableview,直到数据加载并将我的图像添加到常规视图并对其进行动画处理。我非常特别需要一个简单的自定义活动指示器,它只是在等待数据时旋转图像,然后在数据加载时消失。这只会在从我的菜单加载视图控制器时发生。 –

回答

0

您可以避免使用您的UIView,而是可以使用活动指示器。 尝试是这样的:

-(void)viewDidLoad{ 
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
    backgroundView.tag=1; 
    [backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

    self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
    self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 

    [backgroundView addSubview:self.tableLoading]; 
    [self.view addSubview:backgroundView]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Do your web service call asynchronous 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      //All UI needs to be here, in this thread 
      // remove from superview your loading image to show your tableview content 
      for (UIView *subview in [self.view subviews]) { 
       if (subview.tag == 1) { 
        [subview removeFromSuperview]; 
       } 
      } 
      [self.yourTableView reloadData]; 
     }); 
    }); 
} 
+0

这就是我最初开始的,但我想有我自己的自定义活动指标,使用一个简单的图像。 –

+0

@KyleBegeman看我的编辑 –

+1

工作就像一个魅力!非常感谢! –

0

你是如何做你的web服务调用?我想这是在一个异步块上完成的。也许像AFNetworkingNSOperation块?如果是这样,你在哪里设置图像作为背景?所有用户界面(UI)的东西不应该在后台线程上完成,它应该在主线程上完成,因为主线程是唯一应该参与UI的人。

尝试以下操作:

dispatch_async(dispatch_get_main_queue(), ^{ 

    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, self.view.bounds.size.height)]; 
    [backgroundView setBackgroundColor:[UIColor colorWithRed:227.0/255.0 green:227.0/255.0 blue:227.0/255.0 alpha:1.0]]; 

    self.tableLoading.image = [UIImage imageNamed:@"loading.png"]; 
    self.tableLoading.frame = CGRectMake(145, 80, 30, 30); 
    [backgroundView addSubview:self.tableLoading]; 

    [self.feedTableView setBackgroundView:backgroundView]; 

}); 

可以开始显示UITableView背景图片,当你开始请求,只是驳回请求完成网络之后。

例如,SLRequest有一个名为performRequestWithHandler:的发送请求方法,它有一个处理程序在请求完成时被调用,在该处理程序中,您可以关闭自定义指示符或将其从视图控制器中删除。

希望得到这个帮助。

+0

这实际上是一个使用SLRequest的Twitter调用。我基本上只是想在屏幕中间做一个自定义活动指示器,当没有tableview数据时,然后当数据加载tableview应该自动掩盖图像,然后我可以摆脱它。 –

+0

我更新了我的帖子,请看看。我之前没有使用过'SLRequest',但我确信这是围绕网络的想法。 – Malloc