3
votes

I am using an NSScrollview to scroll programatically. I have hidden the horizental and vertical scrollers but the user is still able to scroll using the mouse wheel.I want to prevent thismanual scrolling.

This is how I am doing the automatic scrolling

- (IBAction)scrollToMidAnimated:(id)sender
{
    [NSAnimationContext beginGrouping];
    [[NSAnimationContext currentContext] setDuration:2.0];
    NSClipView* clipView = [self.scrollView contentView];
    NSPoint newOrigin = [clipView bounds].origin;
    newOrigin.y = [self.scrollView contentView].frame.size.height/2.0;
    [[clipView animator] setBoundsOrigin:newOrigin];
    [NSAnimationContext endGrouping];
}

It works perfectly but I want to prevent the user from manual scrolling(I only want to scroll programatically).Is there any way to do that?

3
At least on a UIScrollView, you can set userInteractionEnabled=NO. Is this an option with NSScrollView? - Marco
There is no such option in NSScrollview. - zzzzz

3 Answers

4
votes

Try like this create custom scrollview class and then include below piece of code:-

    - (void)scrollWheel:(NSEvent *)theEvent
    {
    [[self nextResponder] scrollWheel:theEvent];
     }
0
votes

Finally got the solution.I subclassed NSScrollView and overrided its method scrollwheel and left it empty.

- (void)scrollWheel:(NSEvent *)theEvent
{
    // Do nothing
}
0
votes

if you did hide the scrollers and prevent user scrolling, are you sure you want NSScrollView at all in the first place? Just use NSClipView and animate just like you are doing. No need to subclass and override scrollWheel:. Its a little more cleaner and concise.