Problème avec une NSTableRowView appelée par une NSOutlineView

berfisberfis Membre

Bonjour,

Je n'arrive pas à faire fonctionner une NSTableRowView dans le cadre d'une NSOutlineView. Mon but est de remplacer la couleur de sélection, ce que j'arrive parfaitement à faire avec une NSTableView.

J'utilise donc ma NSTableRowView qui a fait ses preuves, je lie ma NSOutlineView par un outlet delegate au FileOwner de la nib, et j'implemente la méthode suivante :

    - (BFTableRowView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
    {
        static NSString* const kRowIdentifier = @"RowView";
        BFTableRowView* rowView = [outlineView makeViewWithIdentifier:kRowIdentifier owner:self];
        if (!rowView)
        {
            rowView = [[BFTableRowView alloc] initWithFrame:NSZeroRect primaryColor:[NSColor secondarySelectedControlColor] secondaryColor:nil];
            rowView.identifier = kRowIdentifier;
        }
        return rowView;
    }

Et c'est là que les problèmes commencent. Le if (!rowView) est là pour éviter de créer une instance si l'OutlineView l'a déjà fait (ce qui est le cas). Mais bien que view-based, elle crée systématiquement une NSTableCell.

Ce que j'ai déjà essayé :

  1. Supprimer le IF pour forcer la création de ma BFTableRowView. Ça marche, bien sûr, mais on en reste là: La méthode drawSelectionInRect de cette instance n'est jamais appelée.
  2. Donner dans IB le même identifiant que la colonne (unique) de ma NSOutlineView. Dans ce cas rien n'est dessiné, j'ai des lignes blanches.

Bref, je suis à court d'idées et j'en appelle à vous. Merci d'avance !

Réponses

  • LexxisLexxis Membre

    Bonjour,
    pour une NSTableRowView, n'y a-t-il pas une autre méthode dans le delegate pour ce type de vue ? genre outlineView(_:rowViewForItem:)?

  • berfisberfis Membre

    @Lexxis : Enfer, c'était juste la ligne en-dessus dans la doc, et ça fait deux jours que je cours après des exemples qui faisaient appel à viewForTableColumn. "Autant pour moi", comme on dit. Merci, ça marche impeccablement.

Connectez-vous ou Inscrivez-vous pour répondre.