Swift中如何移除QLPreviewController的编辑按钮?
移除QLPreviewController导航栏右上角编辑按钮的方法
以下是几种可行的实现方案,按可靠性排序:
方案一:子类化QLPreviewController,在视图加载完成后移除按钮
通过自定义QLPreviewController子类,在viewDidAppear方法中直接清空导航栏右侧按钮,或者过滤掉编辑按钮:
class CustomQLPreviewController: QLPreviewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 直接清空所有右侧按钮 navigationItem.rightBarButtonItems = [] // 若只想移除编辑按钮,可保留其他按钮: /* navigationItem.rightBarButtonItems = navigationItem.rightBarButtonItems?.filter { $0.title != "编辑" } */ } }
使用时直接实例化这个子类即可,该方法在大部分iOS版本中稳定有效。
方案二:自定义QLPreviewItem,禁用编辑权限
实现QLPreviewItem协议的自定义类,重写canEdit属性返回false,告诉QLPreviewController当前文件不可编辑:
class CustomPreviewItem: NSObject, QLPreviewItem { let previewItemURL: URL? let previewItemTitle: String? // 禁用编辑权限 var canEdit: Bool { false } init(url: URL, title: String?) { self.previewItemURL = url self.previewItemTitle = title super.init() } }
将此类的实例传入QLPreviewController的previewItems数组,部分iOS版本会自动隐藏编辑按钮。注意:该行为可能因系统版本差异有所变化,建议测试验证。
方案三:遍历导航栏子视图,隐藏编辑按钮(兜底方案)
如果前两种方法无效,可通过遍历导航栏子视图找到编辑按钮并隐藏。此方法依赖UI结构,可能随iOS版本更新失效,仅作为兜底:
class CustomQLPreviewController: QLPreviewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) navigationBar.subviews.forEach { subview in guard let button = subview as? UIButton else { return } if button.titleLabel?.text == "编辑" { button.isHidden = true } } } }
内容的提问来源于stack exchange,提问作者muchcool
相关产品推荐
相关产品推荐

