0

我在我的应用程序上使用主从示例。

我添加了MBProgressHUD以在加载细节时显示加载屏幕。

问题是我不知道我在线程上做错了什么,但我最终有两种方法:

1 - 如果我不抛出 dispatch_async(),HUD 会延迟显示;

2 - 如果我在 dispatch_async() 中执行 segue,则加载内容所需的时间比必要的要多。

下面是示例 1 的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [HUD show:YES];
    [self performSegueWithIdentifier:@"detail" sender:nil];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

下面是示例 2 的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [HUD show:YES];
    dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_async(taskQ, ^{
        [self performSegueWithIdentifier:@"detail" sender:nil];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    });
}

有什么线索吗?

4

2 回答 2

0

这是一个对我有用的解决方案:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    HUD = [MBProgressHUD showHUDAddedTo:((AppDelegate*)[[UIApplication sharedApplication] delegate]).window.rootViewController.view animated:YES];
    HUD.labelText = @"Loading";
    HUD.labelFont = [UIFont systemFontOfSize:18];
    HUD.delegate = self;
    [HUD showWhileExecuting:@selector(openYourNewView) onTarget:self withObject:nil animated:YES];
    });
}

-(void)openYourNewView {
    [self performSegueWithIdentifier:@"YourViewIdentifier" sender:self];
}

但是,我在以前的视图中仍然有一些奇怪的旋转,我不知道为什么。

于 2013-08-30T12:13:35.330 回答
0

我以某种方式设法解决了这个问题!

  1. 创建一个普通方法,您将在其中调用 progressHUD 并调用第二个

  2. 创建第二种方法,您可以在其中执行耗时的操作(加载视图)

  3. 在主线程上执行该方法

样本:

-(void)callHUD {

            [progressHUD show];

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [self performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];
                dispatch_async(dispatch_get_main_queue(), ^{
            [progressHUD dismiss];
    });
});
}

-(void)loadView {
    //Perform your segue or transition which needs to load
}

希望这会帮助其他人寻找答案。;) 干杯

于 2015-03-07T03:55:23.637 回答