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でうまく機能するrightBarButtonItem
inを無効にする解決策を見つけました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
}