Есть ли простой способ отключить прокрутку NSTableView.
Кажется, на [myTableView enclosingScrollView]
или [[myTableView enclosingScrollView] contentView]
нет свойства, чтобы отключить его.
Есть ли простой способ отключить прокрутку NSTableView.
Кажется, на [myTableView enclosingScrollView]
или [[myTableView enclosingScrollView] contentView]
нет свойства, чтобы отключить его.
Это работает для меня: подкласс NSScrollView, настройка и переопределение через:
- (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
Надеюсь, это поможет.
Спасибо @titusmagnus за ответ, но я сделал одну модификацию, чтобы не прерывать прокрутку, когда "отключенный" scrollView вложен в другой scrollView: вы не можете прокручивать внешний scrollView, пока курсор находится в пределах внутреннего scrollView. Если ты сделаешь это ...
- (void)scrollWheel:(NSEvent *)theEvent
{
[self.nextResponder scrollWheel:theEvent];
// Do nothing: disable scrolling altogether
}
... тогда "отключенный" scrollView передаст событие прокрутки внешнему scrollView, и его прокрутка не застрянет внутри его подпредставлений.
Работает на меня:
- (void)scrollWheel:(NSEvent *)theEvent
{
[super scrollWheel:theEvent];
if ([theEvent deltaY] != 0)
{
[[self nextResponder] scrollWheel:theEvent];
}
}
Нет простого прямого способа (это означает, что нет такого свойства, как UITableView scrollEnabled
, которое вы можете установить), но я обнаружил этот ответ был полезен в прошлом.
Еще одна вещь, которую вы можете попробовать (не уверен в этом), - это создать подкласс NSTableView
и переопределить -scrollWheel
и -swipeWithEvent
, чтобы они ничего не делали. Надеюсь это поможет
true
по умолчанию для isEnabled
. В любом случае, это можно использовать и в ObjC без изменений! : D
- person Ky Leggiero; 24.02.2018