1

読み込み時間の遅れを減らすために、VC が表示される前に、2 番目の VC にある UIWebView を読み込もうとしています。

私は多くの異なる方法を試しましたが、あまり運がありませんでした。2 番目の VC から直接ロードすると、Web ビューをロードして表示できますが、ロード ラグがあります。そのため、現在、最初の VC で -prepareForSegue メソッドを使用して webview をプリロードしようとしています。読み込みはエラーなしで行われ、セグエは期待どおりに行われますが、webview は空白です。

2 番目の VC の Web ビューは、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];

    }
}

2 番目の VC のコードは、viewDidLoad メソッドで QRWebView.delegate を self に設定するだけです。何かアドバイス?

デリゲート プロトコルを使用してこれを機能させようとしましたが、QRWebView をデリゲートとして設定する方法がわかりませんでした。

4

3 に答える 3

1

UIWebViewUIWindowインスタンスにアタッチされていない限り、そのコンテンツはレンダリングされません。ただし、アタッチ先のウィンドウが表示されている必要はありません。viewDidLoadURL のロードを開始するだけでなく、コンテンツのレンダリングを開始できるように、webview をウィンドウにアタッチしてみてください。次に、viewWillAppear で、View Controller のビュー内の場所に再アタッチできます。

とはいえ、アプリがセグエを実行してからビュー コントローラーを表示するまでにかかる時間は非常に小さいため、この最適化によって状況が改善されない可能性があります。

于 2013-07-10T00:15:45.803 に答える
0

webview を作成して、最初の viewController にリクエストをロードしてみてください。次に、その webView を qrview に渡します。

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

正確ではないかもしれませんが、それが基本的な考え方です。

于 2013-07-08T00:21:02.310 に答える
0

QRWebView は 2 番目の VC の UIWebView オブジェクトにリンクされた IBOutlet であるため、2 番目の VC のビューが読み込まれる前に QRWebView は読み込まれません。prepare メソッドでビューを手動で読み込むことができます。

QRWebViewController *qrview =segue.destinationViewController;
qrview.view;  // load the view
[qrview.QRWebView loadRequest:request];
于 2013-07-10T02:03:18.213 に答える