如何禁用QLPreviewController打印button

任何人都可以告诉我如何删除QLPreviewController打印button? 还想禁用剪切/粘贴/复制。

更新:

这不再适用于iOS 6.“快速查看”在使用XPC的另一个进程中运行。 请参阅[这里] [3]了解更多细节。 我没有预见到任何方式来定制QLPreviewController。 对于任何对iOS 6感兴趣的人,以下答案仍然存在。


如果你想简单地删除动作button,你需要QLPreviewController 。 然后在-viewWillAppear:你需要通过调用[[self navigationItem] setRightBarButtonItem:nil];来移除动作button[[self navigationItem] setRightBarButtonItem:nil]; 这也将消除与其他应用程序共享文件的能力。 如果你没有这个损失,那么这是最简单的解决scheme。 有一点要注意的是, QLPreviewController不打算被定制。 你可以在Github上查看这个仓库 。 它包含一个已经安全的子类的QLPreviewController。 你只需要添加一行来删除操作button。 回购也有一些其他的便利。

更好但更复杂的解决scheme是使用UIDocumentInteractionController 。 从我所了解的QLPreviewController是它使用UIDocumentInteractionControllerQLPreviewController是一般使用和易于添加。 UIDocumentInteractionController提供了更多的控制,但更难使用。 我无法充分描述如何在这里使用它。 我build议检查WWDC 2010会话106了解文档交互控制器。

至于禁用剪切/复制/粘贴,你不能用QLPreviewController来做到这QLPreviewController 。 你可以用UIDocumentInteractionController来做到这UIDocumentInteractionController ,但是我不能指望它。 根据您要显示的文件,您可能可以完全自定义的实现,但这是很多工作。 使纯文本,照片,video和PDF的观众相对容易。 Office文档比它的价值更努力。

编辑:

我已经build立了将动作button移到RBFilePreviewer的能力,所以你不必担心自己做。

如果你QLPreviewController ,然后添加这个方法:

 -(void)viewDidAppear:(BOOL)animated{ [[self navigationItem] setRightBarButtonItem:nil]; } 

在子类中,动作button将在上面的注释中消失。 如果使用viewWillAppear这将不起作用。 另外,这样做的一个意想不到的副作用是预览上的工具栏现在总是出现,而不是仅仅当您点击视图。

 -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self navigationItem].rightBarButtonItems = nil; } 

适用于我而不是[[self navigationItem] setRightBarButtonItem:nil];

我还需要定制QLPreviewController的导航项。 就像rbrown说的那样,使用了XPC,我们不能再在viewDidLoadviewWillAppear添加自定义项目。

目前我用这种方式:

  1. 创build一个新的UIViewController
  2. QLPreviewController的视图添加到新类中

似乎有线但工程。

我这样解决这个问题:

 UIView *viewPreviewController; //from storyboard QLPreviewController *previewController = [[QLPreviewController alloc] init]; previewController.delegate = self; previewController.dataSource = self; previewController.currentPreviewItemIndex = 0; [previewController.view setFrame:CGRectMake(0,0, self.viewPreviewController.frame.size.width, self.viewPreviewController.frame.size.height)]; [previewController.navigationController setHidesBarsOnTap:YES]; previewController.navigationItem.rightBarButtonItems = nil; [self.viewPreviewController addSubview:previewController.view]; 

如果我没有在UIView中包含previewController,那么它将无法工作!

我find了一个解决scheme来禁用QLPreviewController中的rightBarButtonItem ,在iOS8和iOS9中可以正常工作

您只需要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 }