Search code examples
objective-cmacosscrollnstableviewnsscrollview

Disable scrolling in NSTableView


Is there a simple way to disable scrolling of an NSTableView.

It seems there isn't any property on [myTableView enclosingScrollView] or [[myTableView enclosingScrollView] contentView] to disable it.


Solution

  • This works for me: subclass NSScrollView, setup and override via:

    - (id)initWithFrame:(NSRect)frameRect; // in case you generate the scroll view manually
    - (void)awakeFromNib; // in case you generate the scroll view via IB
    - (void)hideScrollers; // programmatically hide the scrollers, so it works all the time
    - (void)scrollWheel:(NSEvent *)theEvent; // disable scrolling
    
    @interface MyScrollView : NSScrollView
    @end
    
    #import "MyScrollView.h"
    
    @implementation MyScrollView
    
    - (id)initWithFrame:(NSRect)frameRect
    {
        self = [super initWithFrame:frameRect];
        if (self) {
            [self hideScrollers];
        }
    
        return self;
    }
    
    - (void)awakeFromNib
    {
        [self hideScrollers];
    }
    
    - (void)hideScrollers
    {
        // Hide the scrollers. You may want to do this if you're syncing the scrolling
        // this NSScrollView with another one.
        [self setHasHorizontalScroller:NO];
        [self setHasVerticalScroller:NO];
    }
    
    - (void)scrollWheel:(NSEvent *)theEvent
    {
        // Do nothing: disable scrolling altogether
    }
    
    @end
    

    I hope this helps.