NSWSow的NSScrollView

ben*_*ree 4 cocoa objective-c nswindow nsscrollview

我在NSWindow里面有一个NSScrollView,但它似乎被禁用了.它看起来像它会工作,但滚动条不响应鼠标或滚轮.

当我在一个新的XCode项目的窗口中放置完全相同的NSScrollView时,它完美无缺.我正在制作阻止滚动工作的窗口的方式.

我已经能够简化它到这个例子:

//Make a window
NSWindow* myWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(300, 300, 300, 300)
                                       styleMask:NSTitledWindowMask
                                       backing:NSBackingStoreRetained
                                       defer:NO];

//Make a scroll view
NSScrollView *scrollview = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300)];
[scrollview setHasVerticalScroller:YES];
[scrollview setAcceptsTouchEvents:YES];
[myWindow setContentView:scrollview];

//Add something big to the scroll view
NSButton* btn = [[[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 600, 900)] autorelease];
[scrollview setDocumentView:btn];

//Show the window
[NSApp arrangeInFront:self];
[myWindow makeKeyAndOrderFront:self];
[NSApp activateIgnoringOtherApps:YES];
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jos*_*ell 7

基于我刚刚做过的一些实验,你的问题似乎与指定有关NSBackingStoreRetained.文档说:

您不应该使用此模式.它结合了NSBackingStoreNonretained内存使用的局限性NSBackingStoreBuffered.

他们还说:

在Mac OS X 10.5及更高版本中,对保留窗口的请求将导致窗口系统创建缓冲窗口,因为它更符合实际使用.

这似乎不准确; 切换buffer:参数NSBackingStoreBuffered使窗口和滚动视图的行为与我预期的一样.(文档也说不使用NSBackingStoreNonRetained,事实上,它似乎有类似的问题NSBackingStoreRetained.)