在PDFDocument中显示PDFView允许用户选择文档的部分并执行操作,例如,对所选内容进行“复制”。如何在PDFView中禁用选择,同时保留用户放大、缩小和滚动PDF的可能性?
PDFView本身似乎没有提供这样的属性,PDFViewDelegate也没有。
发布于 2018-03-04 20:02:01
您必须对PDFView进行子类,如下所示:
class MyPDFView: PDFView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer is UILongPressGestureRecognizer {
gestureRecognizer.isEnabled = false
}
super.addGestureRecognizer(gestureRecognizer)
}
}发布于 2019-10-01 14:43:42
对于iOS 13,上述解决方案不再起作用。看起来他们改变了PDFView的内部实现,特别是手势识别器的设置方式。我认为通常不鼓励这样做,但是不使用任何内部API仍然可以做到,下面是如何做到的:
1)递归地收集PDFView的所有子视图(参见下面的帮助函数)
let allSubviews = pdfView.allSubViewsOf(type: UIView.self)2)遍历它们并禁用任何UILongPressGestureRecognizer:
for gestureRec in allSubviews.compactMap({ $0.gestureRecognizers }).flatMap({ $0 }) {
if gestureRec is UILongPressGestureRecognizer {
gestureRec.isEnabled = false
}
}帮助函数递归地获取给定类型的所有子视图:
func allSubViewsOf<T: UIView>(type: T.Type) -> [T] {
var all: [T] = []
func getSubview(view: UIView) {
if let aView = view as? T {
all.append(aView)
}
guard view.subviews.count > 0 else { return }
view.subviews.forEach{ getSubview(view: $0) }
}
getSubview(view: self)
return all
}我从包含视图控制器的viewDidLoad方法中调用上述代码。
我还没有找到一种很好的方法将其转化为PDFView的子类,这将是可重用性的首选方法,并且可能只是上述NonSelectablePDFView的一个补充。到目前为止,我尝试的是重写didAddSubview并在调用super之后添加上述代码,但这并不像预期的那样有效。似乎手势识别器只是在后面的步骤中添加,因此确定何时添加手势识别器,以及子类在此之后是否有方法调用一些自定义代码,这将是下一步。
发布于 2020-02-24 13:44:56
只需要做的是它将自动清除选择和用户将不再长按PDF文本。
class MyPDFView: PDFView {
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
self.currentSelection = nil
self.clearSelection()
return false
}
override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer is UILongPressGestureRecognizer {
gestureRecognizer.isEnabled = false
}
super.addGestureRecognizer(gestureRecognizer)
}
}下面的2行需要添加canPerformAction()
self.currentSelection = nil
self.clearSelection()https://stackoverflow.com/questions/49099499
复制相似问题