QLPreviewController 印刷ボタンを削除する方法を教えてもらえますか? また、切り取り/貼り付け/コピーを無効にしたいと考えています。
9 に答える
アップデート:
これは 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ので、自分で行うことを心配する必要はありません。
サブクラス化QLPreviewControllerしてから、この 1 つのメソッドを追加すると、次のようになります。
-(void)viewDidAppear:(BOOL)animated{
[[self navigationItem] setRightBarButtonItem:nil];
}
サブクラスでは、上記の rbrown notes のようにアクション ボタンが非表示になります。を使用すると、これは機能しませんviewWillAppear。また、これを行うことの予期しない副作用は、ビューをタップしたときだけでなく、プレビューのツールバーが常に表示されるようになったことです。
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
}