这真的很尴尬。在推迟了数周之后,我第一次尝试让子类 NSScrollView 被动地表现——结果证明这是一个明智的选择。
这是子类:
h 文件:
#import <Cocoa/Cocoa.h>
@interface ScrollViewPassive : NSScrollView {
// This property is assigned a ref to windowController’s main scrollview.
NSScrollView *svActive;
}
@property (nonatomic, retain) NSScrollView *svActive;
@end
.m 文件:
#import "ScrollViewPassive.h"
@implementation ScrollViewPassive
@synthesize svActive;
// Pass any gesture scrolling up to the main, active scrollview.
- (void)scrollWheel:(NSEvent *)event {
[svActive scrollWheel:event];
}
@end
没有必要为这些被动滚动视图创建出口;在他们的 xib 被分配为 NSBox 的内容后,我立即将他们的 refs 提供给主滚动视图:
[self.boxDisplayingTextViews setContentView:self.subviewCtllr1.view];
// A textview's superview's superview is its scrollview:
((ScrollViewPassive *)[[self.subviewCtllr1.textview1 superview] superview]).svActive = self.scrollviewMain;
就是这样。奇迹般有效。