NSScrollView в окне NSWindow

У меня есть NSScrollView внутри NSWindow, но кажется, что он отключен. Похоже, что это будет работать, но полосы прокрутки не реагируют на мышь или колесо прокрутки.

Когда я помещаю точно такой же NSScrollView в окно нового проекта XCode, он работает отлично. Есть что-то в том, как я создаю окно, которое мешает работе свитка.

Я был в состоянии упростить это к этому примеру:

//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];

Есть идеи?

1 ответ

Решение

Ваша проблема, основанная на некоторых экспериментах, которые я только что сделал, похоже, связана с указанием NSBackingStoreRetained, Документы говорят:

Вы не должны использовать этот режим. Он сочетает в себе ограничения NSBackingStoreNonretained с использованием памяти NSBackingStoreBuffered,

Они также говорят:

В Mac OS X 10.5 и более поздних версиях запросы на сохраненные окна приведут к тому, что оконная система создаст буферизованное окно, поскольку это лучше соответствует фактическому использованию.

Это не кажется точным; переключение buffer: аргумент NSBackingStoreBuffered заставил окно и представление прокрутки вести себя как ожидалось для меня. (Документы также говорят, что не использовать NSBackingStoreNonRetainedи на самом деле, похоже, проблемы, аналогичные NSBackingStoreRetained.)

Другие вопросы по тегам