【问题标题】:Activity indicator after Tab Bar Click选项卡栏单击后的活动指示器
【发布时间】:2013-08-14 07:37:50
【问题描述】:

我有三个视图控制器(A、B、C),当用户单击选项卡栏项目时会显示它们。当用户单击第三个 Tab Bar 项时,将显示 C 视图控制器。 The problem is that when third Tab Bar is selected it triggers a function that does a bunch of calculations and creates UI elements and I would like to display an Activity Indicator while those tasks are being done.

现在我遇到了一个耗时函数阻塞主线程的情况,所以当用户单击第三个选项卡栏项时,UI 冻结,并且当耗时函数完成其工作时显示 C 视图控制器。但我想在函数执行时用微调器显示 C 视图控制器的背景。所以我试图将耗时的函数移动到一个新线程,但我无法让它工作。

- (void)viewDidLoad 的 CViewController.m 中,我有:

activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityView.frame = CGRectMake(0, 0, 35, 35);
activityView.center = self.view.center;
[self.view addSubview:activityView];
[activityView startAnimating];

[NSThread detachNewThreadSelector:@selector(thirdTabClicked) toTarget:self withObject:nil];

然后是函数- (void)thirdTabClicked

//Bunch of code here...

[activityView performSelectorOnMainThread:@selector(calculationDone) withObject:nil waitUntilDone:NO];

而 -(void) 计算完成看起来像这样:

-(void) calculationDone {
    [activityView stopAnimating];
    [activityView removeFromSuperview];
}

但它不起作用。也许这与我有一个用于 UITabBarControllerDelegate 的自定义类这一事实有关,因此实际上从那里调用了 thirdTabClicked。所以我的 TabBarControllerDelegate.m 看起来像这样:

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

if ([viewController respondsToSelector:@selector(secondTabBarClicked)]) {        
    [(id)viewController secondTabBarClicked];
}

if ([viewController respondsToSelector:@selector(thirdTabClicked)]) {
    [(id)viewController thirdTabClicked];
}
}

【问题讨论】:

    标签: iphone ios uiactivityindicatorview


    【解决方案1】:

    你可以试试这个

    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        //Fire api
    dispatch_async(dispatch_get_main_queue(), ^{
        //   update UI
    });
    });
    

    【讨论】:

      【解决方案2】:

      不知道为什么要自定义UITabBarControllerDelegate,直接调用方法thirdTabClicked?该方法已经在 viewDidLoad 中调用,所以我认为没有必要从 TabbarController 委托中调用它。

      【讨论】:

      • 答案在于here。 @lenhhoxung
      • 为什么不使用更常见的viewDidAppear或viewWillAppear?
      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多