禁用NSCollectionView内的PDFView滚动

时间:2014-07-17 07:27:39

标签: objective-c cocoa nsscrollview nscollectionview pdfview

我在CollectionView中有一个PdfView。由于两者都有自己的滚动视图,因此滚动时会出现冲突。所以我想禁用PdfView的滚动。我该怎么办?

2 个答案:

答案 0 :(得分:2)

对于常规滚动视图,您可以通过设置水平和放大来删除滚动。垂直滚动到false值。因此,对于PDF视图,请尝试以下方法:

NSScrollView *enclosingScrollView = [myPdfView enclosingScrollView];
[enclosingScrollView setHasHorizontalScroller:NO];
[enclosingScrollView setHasVerticalScroller:NO];

答案 1 :(得分:0)

我的解决方案有点粗糙,但确实可以。 我只想停止在PDFViews上水平滚动-我的收藏夹视图水平滚动。

我创建了一个视图,该视图有选择地过滤掉滚动鼠标事件并将其放在PFD视图上。

class HorizontalScrollBlockerView: NSView
{
    var scrollNextResponder: NSResponder?

    override func scrollWheel(with event: NSEvent) {
        guard scrollNextResponder != nil else {
            return
        }

        if fabs(event.deltaX) >= fabs(event.deltaY) {
            scrollNextResponder!.scrollWheel(with: event)
        } else {
            super.scrollWheel(with: event)
        }
    }
}

我将视图的“ scrollNextResponder”设置为PDFView的超级视图。

我还写了一个方法,该方法获取第一个子滚动视图(enclos ed ScrollView),该方法可确保在正确缩放比例时PDFView在水平轴上是稳定的。

if let scrollView = pdfView.enclosedScrollView {
    scrollView.usesPredominantAxisScrolling = true
    scrollView.hasHorizontalScroller = false
    scrollView.horizontalScrollElasticity = NSScrollView.Elasticity.none
}