从另一个VC加载第二个VC上的UIWebView

时间:2013-07-07 12:53:09

标签: ios objective-c ios6 uiwebview

我试图在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设置为委托。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

这可能不是完全正确,但这是基本的想法。

答案 2 :(得分:0)

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

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