objective-c macos scroll nstableview nsscrollview

objective c - Deshabilitar el desplazamiento en NSTableView



objective-c macos (4)

¿Hay una manera simple de deshabilitar el desplazamiento de un NSTableView?

Parece que no hay ninguna propiedad en [myTableView enclosingScrollView] o [[myTableView enclosingScrollView] contentView] para deshabilitarla.


Esto funciona para mí: subclase NSScrollView, configuración y anulación a través de:

- (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

Espero que esto ayude.


Funciona para mi:

- (void)scrollWheel:(NSEvent *)theEvent { [super scrollWheel:theEvent]; if ([theEvent deltaY] != 0) { [[self nextResponder] scrollWheel:theEvent]; } }


Gracias a @titusmagnus por la respuesta, pero hice una modificación para no interrumpir el desplazamiento cuando el scrollView "desactivado" está anidado dentro de otro scrollView: No puedes desplazar el scrollView externo mientras el cursor está dentro de los límites del interior scrollView. Si haces esto...

- (void)scrollWheel:(NSEvent *)theEvent { [self.nextResponder scrollWheel:theEvent]; // Do nothing: disable scrolling altogether }

... luego el scrollView "deshabilitado" pasará el evento de desplazamiento hasta el scrollView externo y su desplazamiento no quedará atrapado dentro de sus subvistas.


No hay una forma directa simple (es decir, no hay propiedades como scrollabled de scrollEnabled que pueda establecer), pero esta respuesta me pareció útil en el pasado.

Otra cosa que podrías probar (no estoy seguro de esto) es NSTableView subclases de NSTableView y sobrescribir -scrollWheel y -swipeWithEvent para que no hagan nada. Espero que esto ayude