iOS将图像添加到Tableview背景视图

时间:2013-08-01 02:48:59

标签: ios uitableview uiview

我有一个tableview,用于显示从Web服务加载的数据。有时它会加载很快,有时需要一段时间。在加载时,tableview只显示一个空白屏幕(在我的例子中是灰色屏幕)。我想在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];

背景视图按预期显示,因此显示灰色背景,但我无法显示图像。

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

2 个答案:

答案 0 :(得分:0)

您是如何进行网络服务的?我想它是在异步块上完成的。也许AFNetworking NSOperation之类的内容会阻止?如果是这样,您将图像设置为背景?所有用户界面(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:的发送请求方法,它有一个在请求完成时要调用的处理程序,在该处理程序中,您可以关闭自定义指标或从您的指针中删除它查看控制器。

希望得到这个帮助。

答案 1 :(得分: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];
        });
    });
}