NSTableView sans InterfaceBuilder

TMXTMX Membre
23:41 modifié dans API AppKit #1
Salut,

Dans le cadre de mon application MediaManager, j'essaye d'afficher une TableView dans mon interface mais de manière programmée et non dirigée par IB. Je sais que NSTableView est contenu dans un objet NSScrollView. Le problème d'affichage, que je rencontre, se situe dès lors que j'essaye d'ajouter une colonne à  ma TableView.

Je précise que dans le cadre de mon application, il m'est impossible de passer par InterfaceBuilder à  cause des limitations inhérentes à  son utilisation : un controlleur unique par fichier NIB. Comme mon application à  besoin de plusieurs controlleurs pour un seul fichier NIB, c'est donc infaisable.

J'ai réussi à  afficher la majorité des composants de Cocoa, mais le composant NSTableView résiste.

Quelqu'un a-t'il déjà  rencontrer le problème ?  :why?:

Voici un bout de code :

NSScrollView *lScrollView = NSScrollView alloc] initWithFrame:[MMGraphics createFrameWithX:20 y:18 width:164 andHeight:146;
[lScrollView setHasHorizontalScroller:YES];
[lScrollView setHasHorizontalRuler:YES];
[lScrollView setHasVerticalScroller:YES];
[lScrollView setHasVerticalRuler:YES];
applicationStyleTableView = NSTableView alloc] initWithFrame:[MMGraphics createFrameWithX:0 y:0 width:147 andHeight:113;
[applicationStyleTableView setAllowsEmptySelection:NO];
[applicationStyleTableView setAllowsMultipleSelection:NO];
[applicationStyleTableView setAllowsColumnSelection:NO];
[applicationStyleTableView setAllowsColumnReordering:NO];
[applicationStyleTableView setUsesAlternatingRowBackgroundColors:YES];
[lScrollView addSubview:applicationStyleTableView];
NSTableColumn *lStyleTC = [[NSTableColumn alloc] initWithIdentifier:@style];
[lStyleTC setTableView:applicationStyleTableView];
[lStyleTC setEditable:NO];
[[lStyleTC headerCell] setStringValue:@Style];
[[lStyleTC headerCell] setAlignment:NSCenterTextAlignment];
[[lStyleTC dataCell] setAlignment:NSLeftTextAlignment];
[lStyleTC setWidth:144];
[applicationStyleTableView addTableColumn:lStyleTC];
[lIGBox addSubview:lScrollView];

J'ai besoin d'aide sur ce point !!!

Réponses

  • TMXTMX Membre
    23:41 modifié #2
    Laissez tomber les gars, j'ai trouvé  ::)

    Je m'étais trompé au niveau de l'ajout du NSTableView dans le NSScrollView. Il fallait l'intégrer dans le documentView et non en faire une subview.

    Voici le code final :

    // Creation du tableau des styles
    NSScrollView *lScrollView = NSScrollView alloc] initWithFrame:[MMGraphics createFrameWithX:20 y:18 width:164 andHeight:146;
    [lScrollView setHasHorizontalScroller:YES];
    [lScrollView setHasHorizontalRuler:YES];
    [lScrollView setHasVerticalScroller:YES];
    [lScrollView setHasVerticalRuler:YES];
    [lScrollView setBorderType:NSBezelBorder];
    applicationStyleTableView = NSTableView alloc] initWithFrame:[MMGraphics createFrameWithX:0 y:0 width:147 andHeight:113;
    [applicationStyleTableView setAllowsEmptySelection:NO];
    [applicationStyleTableView setAllowsMultipleSelection:NO];
    [applicationStyleTableView setAllowsColumnSelection:NO];
    [applicationStyleTableView setAllowsColumnReordering:NO];
    [applicationStyleTableView setAllowsColumnResizing:NO];
    [applicationStyleTableView setGridStyleMask:(NSTableViewSolidVerticalGridLineMask | NSTableViewSolidHorizontalGridLineMask)];
    [applicationStyleTableView setUsesAlternatingRowBackgroundColors:YES];
    [lScrollView setDocumentView:applicationStyleTableView];
    NSTableColumn *lStyleTC = [[NSTableColumn alloc] initWithIdentifier:@style];
    [lStyleTC setTableView:applicationStyleTableView];
    [lStyleTC setEditable:NO];
    [[lStyleTC headerCell] setStringValue:@Style];
    [[lStyleTC headerCell] setAlignment:NSCenterTextAlignment];
    [[lStyleTC dataCell] setAlignment:NSLeftTextAlignment];
    [lStyleTC setWidth:144];
    [applicationStyleTableView addTableColumn:lStyleTC];
    [lIGBox addSubview:lScrollView];

    Aahhhh !! Cà  fait du bien de comprendre comment fonctionne réellement Cocoa. InterfaceBuilder est très bien, mais il manque beaucoup de transparence. Maintenant, je sais le code généré lorsque l'on crée une NSTableView à  partir d'IB.  8--)

    Je vais enfin pouvoir faire des interfaces graphiques personnalisables à  souhait.  :)

    @++
    TMX
Connectez-vous ou Inscrivez-vous pour répondre.