如何禁用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
是它使用UIDocumentInteractionController
。 QLPreviewController
是一般使用和易于添加。 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,我们不能再在viewDidLoad
或viewWillAppear
添加自定义项目。
目前我用这种方式:
- 创build一个新的
UIViewController
类 - 将
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 }