1

QLPreviewControllerサブビューを追加する次のコードがあります

{
    QLPreviewController *preview = [[QLPreviewController alloc] init];
    preview.delegate = self;
    preview.dataSource = self;
    [self addChildViewController:preview];
    [self.view addSubview:preview.view];
    [preview didMoveToParentViewController:self];
    self.previewController = preview;
}

-(NSInteger) numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
    return 1;
}

-(id) previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index
{
    return self.url;
}

self.urlNSURL thatNSTemporaryDirectory にあります - file://localhost//.../blah.pdf

私の問題は、ラップトップがインターネットに接続されている場合、ドキュメントがサブビューとして表示されますが、ラップトップが接続されていない場合、呼び出されないことですnumberOfPreviewItemsInPreviewControllerpreviewItemAtIndex

  • シンプルなView Controllerでバニラプログラムを試してみましたが、うまくいくようです。(私のアプリはそれよりも複雑です)。
  • ドキュメントをモーダル ビューとして表示しようとすると、シミュレーターがインターネットに接続されているかどうかに関係なく動作するようです。 [self presentViewController:preview animated:NO completion:nil];--> 一貫して動作します。

サブビューをオンライン モードとオフライン モードで動作させる必要があります。誰かが助けてくれると助かります!

4

1 に答える 1

2

QLPreviewController のビューは別のビューに埋め込むように設計されていないため、奇妙な動作が発生する可能性があります。QLPreviewController クラス リファレンスの概要から:

クイック ルック プレビュー コントローラーを表示するには、次の 2 つのオプションがあります。 UINavigationController オブジェクトを使用してビューにプッシュするか、その親クラスである UIViewController の presentModalViewController:animated: メソッドを使用してモーダルに全画面表示することができます。

そうは言っても、あなたは試すことができます:

  1. QLPreviewController に強制的にその内容を (再) 表示させます。[self.previewController reloadData];最初のメソッドの最後に追加してみてください。これにより、データ ソース メソッドが強制的に起動されます。

  2. サブビューのビューを強制的に「更新」します[self.view setNeedsLayout](実際には、最初のオプションのように reloadData を強制する場合があります)。

幸運を!

于 2013-03-28T09:13:14.290 に答える