Ios 如何禁用QLViewController打印按钮
有人能告诉我如何删除QLViewController打印按钮吗?还想禁用剪切/粘贴/复制。更新: 这在iOS 6中不再有效。Quick Look使用XPC在另一个进程中运行。有关详细信息,请参见[此处][3]。我没有预见到任何定制QLPreviewController的方法。以下答案仍然适用于对iOS 6之前版本感兴趣的任何人Ios 如何禁用QLViewController打印按钮,ios,pdf,qlpreviewcontroller,Ios,Pdf,Qlpreviewcontroller,有人能告诉我如何删除QLViewController打印按钮吗?还想禁用剪切/粘贴/复制。更新: 这在iOS 6中不再有效。Quick Look使用XPC在另一个进程中运行。有关详细信息,请参见[此处][3]。我没有预见到任何定制QLPreviewController的方法。以下答案仍然适用于对iOS 6之前版本感兴趣的任何人 如果只想删除操作按钮,则需要将其子类化为qlviewcontroller。然后在-view中将出现:您需要通过调用[[self-navigationItem]SetRi
如果只想删除操作按钮,则需要将其子类化为
qlviewcontroller
。然后在-view中将出现:
您需要通过调用[[self-navigationItem]SetRightBarButtonim:nil]删除操作按钮代码>这也将删除与其他应用程序共享文件的功能。如果你对这一损失感到满意,那么这是最简单的解决办法。需要注意的一点是,QLPreviewController
不是定制的。你可以在Github上查看这个。它包含一个已经被安全地子类化的QLPreviewController。只需添加一行即可删除操作按钮。回购协议还有其他一些便利
更好但更复杂的解决方案是使用UIDocumentInteractionController
。根据我对qlviewcontroller
的理解,它是使用UIDocumentInteractionController
构建的QLEVIEWCONTROLLER
是为通用和易于添加而设计的UIDocumentInteractionController
提供了更多的控制,但更难使用。我无法充分描述如何在这里使用它。我建议查看WWDC 2010会话106了解文档交互控制器
至于禁用剪切/复制/粘贴,您不能使用QLPreviewController
。您可能可以使用UIDocumentInteractionController
实现这一点,但我不会指望它。根据您想要显示的文件,您可能可以执行完全自定义的实现,但这需要大量的工作。制作纯文本、照片、视频和PDF的查看器相对容易。办公室文档的工作量超过了它的价值
编辑:
我已经建立了将操作按钮直接删除到RBFilePreviewer
中的功能,这样您就不必担心自己做了 如果您子类化QLPreviewController
,然后添加此方法:
-(void)viewDidAppear:(BOOL)animated{
[[self navigationItem] setRightBarButtonItem:nil];
}
在子类中,动作按钮将消失,如上面rbrown所述。如果使用视图将出现
,则此操作将不起作用。此外,执行此操作的一个意外副作用是,预览上的工具栏现在始终显示,而不是仅在点击视图时显示
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[self navigationItem].rightBarButtonItems = nil;
}
适用于我,而不是[[self-navigationItem]setRightBarButtonim:nil]代码>我还需要自定义QLPreviewController
的导航项。正如前面所说,使用了XPC,我们不能再在viewDidLoad
或viewwillbeen
中添加自定义项
目前我使用这种方式:
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];
创建一个新的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];
如果我没有将previewController合并到UIView中,那么它将无法工作 我找到了一个在QLPreviewController
中禁用rightBarButtonItem
的解决方案,它在iOS8和iOS9中对我很好
您只需子类化qlviewcontroller
并覆盖以下方法,然后使用子类而不是原始的qlviewcontroller
- (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
}
这是我的工作。您必须调试子导航控制器
class QLSPreviewController : QLPreviewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true )
//This hides the share item
if let add = self.childViewControllers.first as? UINavigationController {
if let layoutContainerView = add.view.subviews[1] as? UINavigationBar {
layoutContainerView.subviews[2].subviews[1].isHidden = true
}
}
}
}
此子类与Swift 4.2和iOS 12一起使用。它使用了一个技巧来确保共享图标被隐藏,而不会在用户眼中闪烁
import QuickLook
import UIKit
class PreviewController: QLPreviewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
guard let layoutContainerView = self.children.first?.view.subviews[1] as? UINavigationBar else { return }
layoutContainerView.isHidden = true
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
guard let layoutContainerView = self.children.first?.view.subviews[1] as? UINavigationBar else { return }
layoutContainerView.subviews[2].subviews[1].isHidden = true
layoutContainerView.isHidden = false
}
}
谢谢只有在我设置RightBarbuttonItem时才起作用:在“ViewDidAspect”中为零-ViewDidAspect是一个奇怪的地方。它在视图中工作吗?如果可能的话,那会好得多。另外,你是否会同意/接受我的答案是正确的?事实证明,删除操作按钮并不像我想的那么简单。QLPreviewController下面有很多怪癖。RBFilePreviewer现在内置了该功能,可以处理所有不同的情况。另外,我还修复了原始QLPreviewController中的一个“bug”,该bug导致它在按下时不显示文档导航栏,而不是以模式显示。您还可以在我的演示存储库中看到RBFilePreviewer的演示:。RBFilePreviewer从iOS6起不再工作:(至少,移除按钮部分不适用……它不适用于iOS 8 GM种子。请提供一些其他建议。对我也适用,但“下一步”和“上一步”按钮的箭头奇怪地消失了,留下两个黑色的空按钮。对于iOS 6的解决方案,请看这里:使用Xcode 8.3对我来说效果很好。这不起作用,正如Neogene之前的回答一样Sparanza,如果您有许多文档要预览-更改文档后,一切都会像之前一样。