2011-07-01 77 views
4

我有一個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]; 

任何想法?

回答

7

根據我剛剛做的一些實驗,你的問題似乎是與指定NSBackingStoreRetained。該文檔說:

您不應該使用此模式。它結合了NSBackingStoreNonretained的限制與NSBackingStoreBuffered的內存使用。

他們也說:

在Mac OS X 10.5或更高版本,留存窗戶請求將導致在窗口系統中創建一個緩衝的窗口,爲更好地匹配實際使用。

這似乎並不準確;將buffer:參數切換爲NSBackingStoreBuffered使得窗口和滾動視圖的行爲與我的預期相同。 (該文檔也稱不使用NSBackingStoreNonRetained,事實上,它似乎有類似於NSBackingStoreRetained的問題。)

+0

是的,是的,是的。 NSBackingStoreBuffered修復了它。非常感謝。它還在NSWindow中修正了一些其他片狀問題的一些觀點。 – bendytree