美文网首页
1.presentViewController:animated

1.presentViewController:animated

作者: HaloMartin | 来源:发表于2017-09-01 14:56 被阅读0次

    现象

    在A页面的tableView的回调方法中使用present方法展示下一级viewController:B,出现延迟,断点后了解到,点击后顺序执行了presentViewController方法,但是completion没有紧跟着跳进,B也没有被present出来,而且在当前页面A的等待时间跟在点击A中该Cell前停留在此A页面的时间呈正相关,即点击前停留的越久,present出B页面就需要等越长的时间,如果进入A后直接点击Cell进入B,大概需要等不到1s;稍等3s后,需要等待5s以上。

    原因

    原因未知,可能是因为present方法不是在主线程中执行的

    解决方法

    把相关方法放在主线程中执行
    原代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString* identifier = [_menuArray objectAtIndex:indexPath.row];
        if (identifierRecordManager == identifier) {
            UIViewController *vc = [[HHRecordManagerViewController alloc] initWithModulatorInfo:_info];
            UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:vc];
            [self presentViewController:nv animated:YES completion:nil];
        }
    }
    

    放在主线程调用

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString* identifier = [_menuArray objectAtIndex:indexPath.row];
        if (identifierRecordManager == identifier) {
            dispatch_async(dispatch_get_main_queue(), ^{
                //present方式呈现,会出现界面延迟弹出的问题,放在主线程中可以解决这个问题
                UIViewController *vc = [[HHRecordManagerViewController alloc] initWithModulatorInfo:_info];
                UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:vc];
                [self presentViewController:nv animated:YES completion:nil];
            });
        }
    }
    

    缺点

    根本原因未知,治标不治本

    相关文章

      网友评论

          本文标题:1.presentViewController:animated

          本文链接:https://www.haomeiwen.com/subject/qyxkjxtx.html