UIVind with uiindicator sethidden =在sethidden = YES之后没有工作

时间:2013-12-09 07:31:20

标签: ios iphone objective-c uiview uistoryboard

我有一个覆盖屏幕的uiView,标签和uiindicator在我进行网络通话时运行。

现在问题就在于此。我在viewdidload

中初始化了这个
[self.UiIndicator_view setHidden:YES];
[self.UiIndicator_label setHidden:YES];
[self.UiIndicator_indicator setHidden:YES];

在我打电话的网络电话上

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
 {
            [self ShowIndicator:@"Syncing Data"];

            if([self CheckNetwork])
                [HttpMethods GetHeaderDataForAppHttp];
            dispatch_async(dispatch_get_main_queue(), ^
            {
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Network Error"
                                                                  message:@"You have no network connection. Please connect to a network to sync data."
                                                                 delegate:self
                                                        cancelButtonTitle:@"Ok"
                                                        otherButtonTitles:nil];

                [alertView show];
                [self StopIndicator];
            });
});

,方法如下

-(void)ShowIndicator:(NSString*)labelText
{
    [self.UiIndicator_view setHidden:NO];
    [self.UiIndicator_label setHidden:NO];
    [self.UiIndicator_label setText:labelText];
    [self.UiIndicator_indicator setHidden:NO];
    [self.UiIndicator_indicator startAnimating];
}

-(void)StopIndicator
{
    [self.UiIndicator_view setHidden:YES];
    [self.UiIndicator_label setHidden:YES];
    [self.UiIndicator_indicator setHidden:YES];
    [self.UiIndicator_indicator stopAnimating];
}

现在问题。当我第一次启动应用程序时,代码运行完全正常。调用转到dispatch_asyn,我看到带有标签和指示符的UIView,并且在调用返回主线程后,uiview和指示符消失,如果没有提取数据,我将获得alertview。

如果在第一次尝试时无法获取数据,我已经为用户提供了手动调用相同功能的选项。这里出现了问题,我可以在NSLOG中看到该方法已被调用,http请求被触发,但我看不到带指示符的uiview,即使是uiview后面的元素和按钮也不可点击(这意味着在顶部有一个UIVIEW,但我看不到它。一段时间后,我得到了uialeart,这意味着通话已经完成。

设置uiview hidden = yes是否会使其无效或类似的东西?我无法解决这个简单的问题。

1 个答案:

答案 0 :(得分:1)

您正在后台队列中调用[self ShowIndicator:@"Syncing Data"];

仅更新主队列上的UI。

更具体地说:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
{
    [self ShowIndicator:@"Syncing Data"]; <<<< THIS IS YOUR PROBLEM