我需要一个更大的滚动窗口内固定大小的NSTextViews。 IB要求textviews是自己NSScrollViews内,即使他们的最小/最大尺寸是固定的,使它们实际上不会滚动。当触控板手势TextView的框架内进行的(不管他们是否具有焦点),它们是由textviews’ scrollviews拍摄,所以什么也没发生。
我该如何告诉textviews’ scrollviews通过滚动事件到窗口的滚动型为主? (也许我应该问我怎么告诉窗口的滚动型主要用于处理这些事件本身,而不是将它们传递到其子scrollviews。)
IB的结构是这样的:
您不需要创建一个出口“svActive”来追踪你的超级滚动视图。只要写这句话在滚轮事件:
[[self nextResponder] scrollWheel:event];
这将传递事件到下一个响应者在响应链。
IB不要求你有NSScrollView
内的文本视图;这仅仅是默认的,因为大多数的时候,你会希望你的视图中滚动。选择NSTextView
并选择布局>取消嵌入对象。请注意,这一点后,你再也不能移动或调整在IB视图。这似乎是一个错误。
下面是如何将两个NSTextViews
单一NSScrollView
的例子。
添加相邻两个文本的意见;把一些文字里面,这样你可以看到发生了什么。
选择的意见;选择布局>嵌入对象在>滚动查看。这使他们在一个NSView
内的通用NSScrollView
。
选择文本的意见;选择布局>取消嵌入对象。
关闭弹簧和支柱(自动调整大小)对于每个文本视图,所以当你缩小滚动视图,他们不会进行调整。
就拿文档视图的高度的说明(这里是175)。
使滚动视图小。这也调整文档视图(NSView
)。
还原文档视图到其原始大小(我设定的高度回175)。
完成!滚动的作品,你会期望。
这实在是令人尴尬的。把它关闭星期后,我做了第一次尝试得到一个子类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
有没有必要为这些被动scrollviews网点;我给他们的裁判到主滚动型之后他们xibs被指定为内容的NSBox:
[self.boxDisplayingTextViews setContentView:self.subviewCtllr1.view];
// A textview's superview's superview is its scrollview:
((ScrollViewPassive *)[[self.subviewCtllr1.textview1 superview] superview]).svActive = self.scrollviewMain;
而已。奇迹般有效。
我发现,IB3和Xcode4都打你,如果你想直接做到这一点,但你可以间接地做到这一点。首先,拖动TextView的出滚动视图,并删除了滚动。你会用一个孤立的TextView拉闸。我不知道有什么办法让IB让你把这个到你的窗口,但它会在你的NIB。现在,附加一个IBOutlet到它,并在运行时做了addSubview:
并调整其框架将其移动到你希望它以什么滚动视图。
根据我的经验,发钞银行是一个很好的事情,但每一个复杂的NIB我曾经在代码需要一些清理最后的工作。
根据@ phaibin的答案,这里是你如何做到这一点的雨燕4.2。
首先,子类NSScrollView
并重写scrollWheel
:
class ScrollThingy: NSScrollView{
override func scrollWheel(with event: NSEvent) {
self.nextResponder?.scrollWheel(with: event)
}
}
然后把ScrollThingy
类(或任何你的名字)上是围绕你的NSScrollView
包裹NSTextView
。父NSScrollView
其后将得到滚动事件。