Chargement dynamique de vues
Flo
Membre
Bonjour à tous,
j'ai un petit soucis qui m'a occupé toute la soirée d'hier et que je n'arrive pas à résoudre
En gros j'ai une BWSplitView verticale avec la bottom view en collapsible. Au départ la bottom view est collapsée et je souhaiterai lui ajouter une vue chargée dynamiquement (via NSWindowController) avant de la montrer à l'utilisateur quand il clique sur un bouton.
J'ai donc le code suivant :
La bottomLeftAndCornerView se montre bien mais elle semble vide (=la addQuotationsView n'est pas affichée bien qu'elle lui ait été ajoutée). Il y a en outre deux comportements bizarres :
- si je bouge le separator vers le haut, l'addQuotationsView se dessine progressivement en fonction du déplacement (capture jointe)
- si je bouge le separator jusqu'à le limite basse et que je le remonte l'addQuotationsView s'affiche correctement en fonction du déplacement.
J'ai essayé de mettre des setNeedsDisplay: YES dans tous les coins sans succès.
J'ai également essayé de fixer moi même le frame.origin de l'addQuotationsView et de changer à la main toutes ses dimensions sans plus de réussite.
Quelqu'un aurait une idée ? ???
Merci !
j'ai un petit soucis qui m'a occupé toute la soirée d'hier et que je n'arrive pas à résoudre
En gros j'ai une BWSplitView verticale avec la bottom view en collapsible. Au départ la bottom view est collapsée et je souhaiterai lui ajouter une vue chargée dynamiquement (via NSWindowController) avant de la montrer à l'utilisateur quand il clique sur un bouton.
J'ai donc le code suivant :
<br />- (IBAction) addQuotations: (id)sender<br />{ <br /> // creates the required controller if needed<br /> if (!self.addQuotationsViewController)<br /> {<br /> // loads the add quotations view's nib for the first time<br /> ITAddQuotationsViewController *newAddQuotationViewController = <br /> [[ITAddQuotationsViewController alloc] initWithNibName: ADD_QUOTATIONS_VIEW_NIB bundle: nil];<br /> <br /> NSView *addQuotationsView = newAddQuotationViewController.view;<br /> <br /> addQuotationsView.frame = self.bottomLeftAndCornerView.bounds;<br /> <br /> [self.bottomLeftAndCornerView addSubview: addQuotationsView];<br /> <br /> self.addQuotationsViewController = newAddQuotationViewController;<br /> [newAddQuotationViewController release];<br /> }<br /> else <br /> {<br /> NSView *addQuotationsView = self.addQuotationsViewController.view;<br /> NSArray *bottomLeftAndCornerSubViews = [self.bottomLeftAndCornerView subviews];<br /> <br /> // remove the previous bottom left and corner view's content if needed<br /> if (![bottomLeftAndCornerSubViews containsObject: addQuotationsView])<br /> {<br /> [self.bottomLeftAndCornerView replaceSubview: [bottomLeftAndCornerSubViews objectAtIndex: 0] <br /> with: addQuotationsView];<br /> }<br /> }<br /> <br /> // shows the bottom left and corner view if needed<br /> if (self.leftSplitView.collapsibleSubviewCollapsed)<br /> {<br /> [self.leftSplitView toggleCollapse: nil];<br /> }<br />}<br />
La bottomLeftAndCornerView se montre bien mais elle semble vide (=la addQuotationsView n'est pas affichée bien qu'elle lui ait été ajoutée). Il y a en outre deux comportements bizarres :
- si je bouge le separator vers le haut, l'addQuotationsView se dessine progressivement en fonction du déplacement (capture jointe)
- si je bouge le separator jusqu'à le limite basse et que je le remonte l'addQuotationsView s'affiche correctement en fonction du déplacement.
J'ai essayé de mettre des setNeedsDisplay: YES dans tous les coins sans succès.
J'ai également essayé de fixer moi même le frame.origin de l'addQuotationsView et de changer à la main toutes ses dimensions sans plus de réussite.
Quelqu'un aurait une idée ? ???
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Essaie aussi d'intervertir ces deux lignes:
En fait le problème est lié au comportement de BWSplitView qui met la hauteur de la bottomLeftAndCornerView à zéro quand elle est collapsée. Du coup quand je fait :
et bien la hauteur de addQuotationsView est également à zéro. BWSplitView gère le uncollapse d'une view à l'aide d'un attribut (int uncollapseSize) qui correspond à la hauteur de la bottomLeftAndCornerView avant le dernier collapse. Du coup il suffit de faire un truc du genre :
comme ça la bottomLeftAndCornerView et la addQuotationsView ont bien les mêmes dimensions et les mêmes positions.
Il n'y a pas de property associé à l'attribut int uncollapseSize, du coup je suis obligé de passer par le KVC mais si certains ont d'autres solutions je suis preneur !
Merci pour vos réponses
- J'ai une BWSplitView A qui contient deux subviews B(supérieure) et C(inférieure)
- Je souhaite remplir la subview C avec une vue D chargée dynamiquement
Le problème initial était qu'après avoir ajouté D dans C et uncollapsé C, D ne s'affichait que si on bougeait le séparateur et qui plus est de manière progressive (comme sur la capture que j'avais fournie).
La solution c'est de garder la taille initiale de D quand on la charge car dès son ajout, elle prends une taille de zéro (inverser les deux lignes du code précédent ne change rien à ce comportement). BWSplitView conserve dans la variable uncollapseSize la taille de C avant le dernier collapse. Donc en gros il suffit de faire :
Et du coup au prochain uncollapse, C et D auront bien les mêmes dimensions, elles seront superposées