[Résolu] - NSWindow et contentView

skimpyskimpy Membre
janvier 2012 modifié dans API AppKit #1
Bonjour,

J'ai créé une sous-classe de NSWindow afin d'avoir une barre de titre semblable à  celle de l'App Store (http://pommedev.mediabox.fr/utilisation-des-classes-cocoa/nstoolbar-plus-petite-et-padding/). J'essaie dans ma sous-classe de repositionner le contentView de la façon suivante, mais ça ne fonctionne pas (il prend toujours en compte le cadre d'une fenêtre standard) :

Code de la sous-class NSWindow :

NSLog(@&quot; Sous-Classe / self : %@&quot;, self);<br />NSLog(@&quot; Sous-Classe / ContentView : %@&quot;, [self contentView]);<br />NSButton *close = [self standardWindowButton:NSWindowCloseButton];<br />NSRect c = [[close superview] frame];<br />NSRect contentViewFrame = NSMakeRect(0, largeTitleBar, NSWidth(c), NSHeight(c) - (largeTitleBar * 2));<br />[[self contentView] setFrame:contentViewFrame];


Dans mon contrôleur, j'ai une IBOutlet vers cette fenêtre. Lorsque dans ce contrôleur j'affiche les informations relatives à  l'objet fenêtre, je n'obtiens pas le même contentView.

Code dans le contrôleur :

NSLog(@&quot;Controleur / _window : %@&quot;, _window);<br />NSLog(@&quot;Controleur / ContentView : %@&quot;, [_window contentView]);


Les logs :
2012-01-17 09:34:37.921 Beam[895:707] Sous-Classe / self : <MYWindow: 0x1005476c0>
2012-01-17 09:34:37.928 Beam[895:707] Sous-Classe / ContentView : <NSView: 0x100549af0>
2012-01-17 09:34:40.199 Beam[895:707] Controleur / _window : <MYWindow: 0x1005476c0>
2012-01-17 09:34:40.200 Beam[895:707] Controleur / ContentView : <NSView: 0x100523cf0>


Est-ce que je procède de la bonne façon ?

Merci.

Réponses

  • mpergandmpergand Membre
    08:40 modifié #2
    dans 1326790091:

    Bonjour,

    J'ai créé une sous-classe de NSWindow afin d'avoir une barre de titre semblable à  celle de l'App Store (http://pommedev.mediabox.fr/utilisation-des-classes-cocoa/nstoolbar-plus-petite-et-padding/). J'essaie dans ma sous-classe de repositionner le contentView de la façon suivante, mais ça ne fonctionne pas (il prend toujours en compte le cadre d'une fenêtre standard) :

    Code de la sous-class NSWindow :

    NSLog(@&quot; Sous-Classe / self : %@&quot;, self);<br />NSLog(@&quot; Sous-Classe / ContentView : %@&quot;, [self contentView]);<br />NSButton *close = [self standardWindowButton:NSWindowCloseButton];<br />NSRect c = [[close superview] frame];<br />NSRect contentViewFrame = NSMakeRect(0, largeTitleBar, NSWidth(c), NSHeight(c) - (largeTitleBar * 2));<br />[[self contentView] setFrame:contentViewFrame];
    


    Dans mon contrôleur, j'ai une IBOutlet vers cette fenêtre. Lorsque dans ce contrôleur j'affiche les informations relatives à  l'objet fenêtre, je n'obtiens pas le même contentView.


    Dans initWithContentRect c'est trop tôt, essaye dans awakeFromNib.
  • skimpyskimpy Membre
    08:40 modifié #3
    Merci ! C'est beaucoup mieux en utilisant le awakeFromNib. Le problème que j'ai maintenant est que lorsque je redimensionne la fenêtre, ma NSView ne s'agrandit pas (bien que l'option dans IB soit activée pour qu'elle s'adapte).

    J'ai ajouté la méthode windowDidResize mais je n'obtiens pas le résultat escompté et l'affichage est saccadé.

    - (void)windowDidResize:(NSNotification *)notification<br />{&nbsp; &nbsp; <br />&nbsp; &nbsp; [[myController view] setFrame:[[_window contentView] convertRect:[[_window contentView] frame] toView:[myController view]]];&nbsp; &nbsp; <br />&nbsp; &nbsp; [[myController view] setNeedsDisplay:YES];<br />}
    
  • CéroceCéroce Membre, Modérateur
    08:40 modifié #4
    Retire ce code et modifie l'autoresizing mask de la vue qui est la fille de la content view.
    Tu peux le régler aussi bien par le xib (et le tester en utilisant la commande "Simulate Interface") que par le code.
  • skimpyskimpy Membre
    08:40 modifié #5
    Merci Céroce. Je ne sais pas ce que j'avais fait au niveau de l'autoresizing mais en reprenant tout depuis le début, ça marche !

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