9

QLPreviewController 印刷ボタンを削除する方法を教えてもらえますか? また、切り取り/貼り付け/コピーを無効にしたいと考えています。

4

9 に答える 9

6

アップデート:

これは iOS 6 では機能しなくなりました。Quick Look は、XPC を使用して別のプロセスで実行されます。詳しくは[こちら][3]をご覧ください。QLPreviewController をカスタマイズする方法は考えていません。次の回答は、iOS 6 より前のバージョンに興味がある人のために残されています。


アクションボタンを単純に削除したい場合は、サブクラス化する必要がありますQLPreviewController。次に、-viewWillAppear:呼び出してアクション ボタンを削除する必要があり[[self navigationItem] setRightBarButtonItem:nil];ます。これにより、他のアプリとファイルを共有する機能も削除されます。その損失に問題がなければ、それが最も簡単な解決策です。注意すべきことの 1 つは、QLPreviewControllerカスタマイズすることを意図していないことです。このリポジトリは Github で確認できます。これには、すでに安全にサブクラス化されている QLPreviewController が含まれています。アクション ボタンを削除するには、1 行追加するだけです。レポには他にも便利な機能がいくつかあります。

より良いがより複雑な解決策は、 を使用することUIDocumentInteractionControllerです。私が理解していることからQLPreviewController、それはを使用して構築されているということUIDocumentInteractionControllerです。QLPreviewController一般的な使用と簡単な追加のために作られました。UIDocumentInteractionControllerより多くの制御が可能になりますが、使いにくくなります。ここでは使い方を十分に説明することはできません。WWDC 2010 セッション 106 Understanding Document Interaction Controller を確認することをお勧めします。

カット/コピー/ペーストの無効化に関しては、QLPreviewController. でそれができるかもしれませんがUIDocumentInteractionController、私はそれを当てにはしません。表示したいファイルによっては、完全にカスタムの実装を行うことができるかもしれませんが、それは大変な作業です。プレーン テキスト、写真、ビデオ、および PDF のビューアを作成するのは比較的簡単です。Office ドキュメントは、価値があるよりも多くの労力を必要とします。

編集:

アクション ボタンをすぐに削除できるようにしましたRBFilePreviewerので、自分で行うことを心配する必要はありません。

于 2011-08-03T02:53:49.047 に答える
2

サブクラス化QLPreviewControllerしてから、この 1 つのメソッドを追加すると、次のようになります。

-(void)viewDidAppear:(BOOL)animated{

    [[self navigationItem] setRightBarButtonItem:nil]; 
}

サブクラスでは、上記の rbrown notes のようにアクション ボタンが非表示になります。を使用すると、これは機能しませんviewWillAppear。また、これを行うことの予期しない副作用は、ビューをタップしたときだけでなく、プレビューのツールバーが常に表示されるようになったことです。

于 2011-10-15T14:20:24.940 に答える
0

iOS8およびiOS9でうまく機能するrightBarButtonIteminを無効にする解決策を見つけましたQLPreviewController

QLPreviewController次のメソッドをサブクラス化してオーバーライドし、元のメソッドの代わりにサブクラスを使用するだけですQLPreviewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // When coming back from background we make sure the share button on the rightbBarButtonItem is disabled
    __weak typeof(self) weakSelf = self;
    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
        weakSelf.navigationItem.rightBarButtonItem.enabled = NO;
    }];
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button
}
于 2016-01-22T08:57:23.197 に答える