【问题标题】:UIView with uiindicator sethidden = No not working after sethidden = YESUIView with uiindicator sethidden = No 在 sethidden = YES 后不工作
【发布时间】:2013-12-26 06:02:49
【问题描述】:

我有一个 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 会使其无效或类似的东西吗?我无法解决这个简单的问题。

【问题讨论】:

    标签: ios iphone objective-c uiview uistoryboard


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2017-05-11
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多