Как я могу сделать NscollectionView Finish Finger, прежде чем представлен, содержащий его, сделан видимым?
-
28-09-2019 - |
Вопрос
Я пытаюсь убрать пользовательский интерфейс в моей заявке (построенный на 10,5), и одна вещь, которая довольно раздражает, это то, что когда я поменяю в библиотеку, я перезагружаю содержимое и NscollectionView, который отображает элементы, исчезают старый контент, прежде чем исчезать Новые. Я не против исчезнуть / из старых / новых предметов, но то, как я запрограммировал замену просмотра, должен заставить перезагрузку библиотеки произойти перед NSView, который содержит NscolliveView, вставляется в главное окно Отказ
У кого-нибудь был такой проблемой раньше?
Вот сокращенная версия того, как своп между разными частями приложения к библиотеке идет:
В главном контроллере:
-(void)setMainPaneToLibrary {
if(viewState == VIEW_STATE_LIBRARY)
return;
[libraryController refreshDevices:self];
[libraryController refreshLibraryContents];
[menuController setSelectionToIndex:0];
viewState = VIEW_STATE_LIBRARY;
[self removeSubview]; //clear the area
[mainPane addSubview:[libraryController view]];
}
В библиотеке контроллера:
-(void)refreshLibraryContents {
[self loadLibraryContents:[rootDir stringByAppendingPathComponent:currentDir]];
}
-(void)loadLibraryContents:(NSString *)folderToLoad {
int i;
int currentSelection = [libraryArrayController selectionIndex]; //used to preserve selection and smooth folder changing
[libraryArrayController setContent:nil];
//expand the path to load
folderToLoad = [folderToLoad stringByExpandingTildeInPath];
NSFileManager * fileManager = [NSFileManager defaultManager];
//load the files in the folder
NSArray * contents = [fileManager directoryContentsAtPath:folderToLoad];
//create two seperate arrays for actual files and folders - allows us to add them in order
NSMutableArray * directories = [[NSMutableArray alloc] init];
NSMutableArray * musicFiles = [[NSMutableArray alloc] init];
//... a load of stuff filling the file arrays ...
for(i=0;i<[directories count];i++) {
[libraryArrayController addObject:[directories objectAtIndex:i]];
}
for(i=0;i<[musicFiles count];i++) {
[libraryArrayController addObject:[musicFiles objectAtIndex:i]];
}
if(currentSelection >= 0) {
[libraryArrayController setSelectionIndex:currentSelection];
}
[directories release];
[musicFiles release];
}
Решение
Вопрос не в том, что сбор сбора не закончил рисование, это то, что он анимирует добавление и удаление субвезонных представлений. Может быть возможно Создать транзакцию Это отключает действия слоя во время перезагрузки контента представления сбора. Листинг 2 (временно отключение действий слоя) показывает, как это сделать. Я не проверил это, поэтому я не знаю, сделает ли это то, что вы хотите, но это где я бы начал.