【问题标题】:loading a UIWebView on second VC from another VC从另一个 VC 在第二个 VC 上加载 UIWebView
【发布时间】:2013-07-04 22:33:45
【问题描述】:

我正在尝试在第二个 VC 出现之前加载位于第二个 VC 上的 UIWebView,以减少加载时间延迟。

我尝试了许多不同的方法,但运气不佳。如果我直接从第二个 VC 加载它,我可以加载并显示 webview,但存在加载滞后。所以,目前我正在尝试在第一个 VC 中使用 -prepareForSegue 方法预加载 webview。加载发生时没有任何错误,segue 按预期发生,但 webview 为空白。

第二个VC上的webview叫做QRWebView。

这是来自第一个 VC 的代码:

- (IBAction)btnQRWebView:(id)sender {

    [self performSegueWithIdentifier: @"segQRWebView" sender: self];
}



- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"segQRWebView"])
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Terminologyapp" ofType:@"pdf"];
    NSURL *url = [NSURL fileURLWithPath:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    QRWebViewController *qrview =segue.destinationViewController;
    [qrview.QRWebView loadRequest:request];

    }
}

第二个 VC 的代码只是在 viewDidLoad 方法中将 QRWebView.delegate 设置为 self。有什么建议吗?

我尝试使用委托协议来完成这项工作,但不确定如何将 QRWebView 设置为委托。

【问题讨论】:

    标签: ios objective-c ios6 uiwebview


    【解决方案1】:

    UIWebView 不会呈现其内容,除非它附加到 UIWindow 实例。但是,它所附加到的窗口不需要可见。您可以尝试将您的 webview 附加到 viewDidLoad 中的窗口,这样它不仅可以开始加载其 URL,而且可以开始呈现内容。然后,在 viewWillAppear 中,您可以将其重新附加到视图控制器视图中的位置。

    也就是说,您的应用执行 segue 然后显示视图控制器所需的时间非常短,以至于这种优化可能无法改善您的情况。

    【讨论】:

    • 我遇到的真正延迟问题只出现在 iPad 3 上......因为我的 segue 使用的是部分卷曲。在 UIWebView 加载过程中,“卷曲”会挂起一秒钟......使动画变得跳跃。我试图避免这种情况。在 iPhone 5 上一切正常。很可能是因为处理器更快。
    【解决方案2】:

    尝试创建 webview 并在初始 viewController 中加载请求。然后将该 webView 传递给您的 qrview。

    UIWebView *webview = [UIWebView alloc] init]; // or initWithFrame or whatever
    [webView loadRequest:request];
    qrview.QRWebView = webView;
    

    这可能完全正确,但这是基本思想。

    【讨论】:

    • AMayes ..谢谢,我确实尝试过,并且在 segue 之后得到了一个空白的 webview。我将您的建议放在第一个 VC 的 ViewDidLoad 中(最后一行除外,它保留在 PrepareForSegue 方法中)。就像第一个 VC 无法识别第二个 VC 上的 UIWebView 设置。
    • QRWebView 是一个实例,还是一个类?
    • QRWebView 是一个链接到第二个 VC 中的 UIWebView 对象的 IBOutlet。
    【解决方案3】:

    因为 QRWebView 是链接到 2nd VC 中的 UIWebView 对象的 IBOutlet,所以在加载 2nd VC 的视图之前不会加载 QRWebView。您可以在 prepare 方法中手动加载视图。

    QRWebViewController *qrview =segue.destinationViewController;
    qrview.view;  // load the view
    [qrview.QRWebView loadRequest:request];
    

    【讨论】:

    • Andraw...谢谢,但我一定错过了什么。行 qrview.view;给出警告(未使用正确的访问结果)。不知道我应该有额外的代码。
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多