Wie kann ich NSCollectionView Fertigziehen vor der Ansicht herzustellen, die es sichtbar gemacht wird?

StackOverflow https://stackoverflow.com/questions/3060238

  •  28-09-2019
  •  | 
  •  

Frage

Ich versuche, die UI auf meiner Anwendung zu bereinigen (gebaut für 10.5) und eine Sache, die ziemlich ärgerlich ist, dass, wenn ich in die Bibliothek tauschen nachladen ich den Inhalt und die nscollectionview dass zeigt die Elemente schwinden der alte Inhalt aus bevor die neuen in Verblassen. ich habe nicht die Ein- / ausblenden der alten / neuen Elemente dagegen, aber die Art, wie ich die Ansicht Swapping programmiert haben sollte die Bibliothek reload passieren, bevor die die NSView machen, der die nscollectionview enthält, wird eingesetzt in das Hauptfenster.

Jeder hatte diese Art von Problem vor?

Hier ist eine gekürzte Version davon, wie der Wechsel zwischen den verschiedenen Teilen der Anwendung in die Bibliothek geht:

In der Hauptsteuerung:

-(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]];
}

In der Bibliothek-Controller:

-(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];   
}
War es hilfreich?

Lösung

Das Problem ist nicht, dass die Sammlung Ansicht nicht fertige Zeichnung hat, ist es, dass es das Hinzufügen und Entfernen des Subviews beseelt. Es kann möglich sein, eine Transaktion dass deaktiviert Schicht Aktionen erstellen, während Sie die Sammlung Ansicht der Inhalte sind neu zu laden. Listing 2 zeigt (vorübergehend eine Schicht Aktionen zu deaktivieren), wie dies zu tun. Ich habe nicht getestet, damit ich weiß nicht, ob dies wird tun, was Sie wollen, aber das ist, wo ich anfangen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top