tableViewColumnShouldResize

beltbelt Membre
03:50 modifié dans API AppKit #1
Bonsoir à  tous
Ne cherchez pas dans la doc ! ça n'existe pas. Par contre, il existe tableViewColumnDidResize:
Voilà  mon problème : je cherche une méthode qui serait appelée à  chaque fois que l'utilisateur commence à  redimensionner une colonne d'une NSTableView et non lorsqu'il a fini. Quelqu'un a une idée ? Merci d'avance.

Réponses

  • Eddy58Eddy58 Membre
    03:50 modifié #2
    Tu peux toujours te baser sur les changements de frame de la view avec la notification NSViewFrameDidChangeNotification. :)
    [tt]
    -(void)awakeFromNib
    {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewFrameChange:) name:NSViewFrameDidChangeNotification object:tableView];
    }

    -(void)tableViewFrameChange:(NSNotification *)notification
    {
    NSLog(@tableViewFrameChange);
    }

    [/tt]
  • beltbelt Membre
    03:50 modifié #3
    Merci pour l'idée.
    Mais il ya un pb : lorsqu'on modifie la largeur d'une colonne, la "frame" de la NSTableView n'est pas modifiée, donc pas de notification !
    Par contre, si une cellule est en édition, l'éditeur associé à  la fenêtre est une vue (NSTextView) dont la "frame" change lorsqu'on redimensionne la colonne. On peut peut-être appliquer cette méthode à  cette vue... Je vais essayer.
  • BruBru Membre
    03:50 modifié #4
    Si si, la méthode d'Eddy est la meilleure...
    Simplement, il y a juste une petite erreur sur l'objet à  observer.
    Ce n'est pas le tableview qui doit être observé, mais son headerview.

    <br />- (void)awakeFromNib<br />{<br />&nbsp; &nbsp; [[NSNotificationCenter defaultCenter] addObserver:self <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  selector:@selector(notif:)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  name:NSViewFrameDidChangeNotification<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  object:[tableview headerView]];<br />}<br /><br />- (void)notif:(NSNotification *)n<br />{<br />&nbsp; &nbsp; NSLog(@&quot;colonne : %i&quot;, [[n object] resizedColumn]);<br />}<br /><br />
    


    .
  • Eddy58Eddy58 Membre
    03:50 modifié #5
    dans 1155630102:

    Mais il ya un pb : lorsqu'on modifie la largeur d'une colonne, la "frame" de la NSTableView n'est pas modifiée, donc pas de notification !

    Curieux, j'ai pourtant fait des essais, ça fonctionne bien chez moi, mais en effet tu peux essayer comme le conseille Bru d'observer la headerView, c'est plus approprié. :o
  • beltbelt Membre
    03:50 modifié #6
    ça marche ! .... mais seulement lorqu'on agrandit la colonne ! Pas quand on la rétrécit.
  • Eddy58Eddy58 Membre
    03:50 modifié #7
    Tu peux toujours essayer de sous-classer NSTableHeaderView et surcharger la méthode mouseDragged. Avec la méthode resizedColumn tu obtiens ainsi la colonne resizée si un resize est en cours. :o
Connectez-vous ou Inscrivez-vous pour répondre.