cacher NSToolBarItem depuis un autre xib
cocoacola71
Membre
Bonjour à tous.
Voilà ma situation critique /crazy.gif' class='bbc_emoticon' alt=' ' /> :
Je charge un autre xib via:
NewWindow apparaà®t donc au premier plan devant ma fenêtre principale.
Sur ma fenêtre principale j'ai un NSToolBar avec plusieurs NSToolBarItem.
Mon but serait de cacher un NSToolBarItem lorsque j'appuie sur un bouton présent sur NewWindow.
1 erreur et un problème se présente:
Me donne l'avertissement suivant : "Incompatible integer to pointer conversion assigning to"NSView *" from BOOL (aka 'signed char')", ce que je ne comprend pas car sur ma fenêtre principale l'avertissement n'apparaà®t pas..
Et mon problème est que peut importe la commande, cela n'a aucun effet sur ma fenêtre principale même lorsque j'essai de caché un bouton. J'ai essayé de rafraichir la fenêtre sans succès.
Est ce qu'il y a une métode spécifique pour cacher ou afficher des objets d'un xib depuis un autre xib??
Merci d'avance pour votre aide..
Voilà ma situation critique /crazy.gif' class='bbc_emoticon' alt=' ' /> :
Je charge un autre xib via:
<br />
[NSBundle loadNibNamed:@"NewWindow" owner:NSApp];<br />
NewWindow apparaà®t donc au premier plan devant ma fenêtre principale.
Sur ma fenêtre principale j'ai un NSToolBar avec plusieurs NSToolBarItem.
Mon but serait de cacher un NSToolBarItem lorsque j'appuie sur un bouton présent sur NewWindow.
1 erreur et un problème se présente:
<br />
NSToolBarItem *user;<br />
user.view = NO;<br />
Me donne l'avertissement suivant : "Incompatible integer to pointer conversion assigning to"NSView *" from BOOL (aka 'signed char')", ce que je ne comprend pas car sur ma fenêtre principale l'avertissement n'apparaà®t pas..
Et mon problème est que peut importe la commande, cela n'a aucun effet sur ma fenêtre principale même lorsque j'essai de caché un bouton. J'ai essayé de rafraichir la fenêtre sans succès.
Est ce qu'il y a une métode spécifique pour cacher ou afficher des objets d'un xib depuis un autre xib??
Merci d'avance pour votre aide..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai utilisé un thread qui me fait planter mon appli, mais lorsque je le lance aucune fenêtre n'apparait lol
Tout ce que je peux dire est qu'on utilise normalement un NSWindowController pour charger une fenêtre depuis un nib.
Oui c'est vrai que mon post n'est pas très garnis en code /unsure.png' class='bbc_emoticon' alt=' ' />
Alors voici le code que contient ma fenêtre pincipale:
Cela m'ouvre bien en premier plan une seconde fenêtre, qui devrait lors de l'appuie sur un bouton m'afficher du texte dans un NSTextField de la fenêtre principale par exemple:
Hors la rien n'apparaà®t, peut importe ce que j'écris la fenêtre principale semble en aucun cas en liaison avec ma seconde fenêtre /sad.png' class='bbc_emoticon' alt=':(' />
que fait exactement /color][color=#000000]chargWebBrows [/color][color=#000088]new[/color][color=#666600 ?
[chargWebBrows new] me permet d'accéder à ma classe chargWebBrows qui elle me permet enfaà®te de charger et utiliser dans ma fenêtre principale un WebView avec certain composants dont mon exemple suivant un NSTextField.
Peut être que je mis prend mal pour appeler mon NSTextField que possède ma classe chargWebBrows.
Etant débutant, je découvre et j'apprend par mes erreurs /rolleyes.gif' class='bbc_emoticon' alt='::)' />
[chargWebBrows new] créé une nouvelle instance qui n'a rien à voir avec l'instance de la fenêtre parente.
Il n'existe deux manières de faire:
1) poster une notification au NSNotificationCenter pour annoncer que le bouton a été actionné. Evidemment, le Window controller de la fenêtre parente se sera mis en auditeur de cette notification. Je déconseille cette approche.
2) utiliser la délégation: je ne vais pas détailler parce que nous le rabâchons ici à longueur d'année (et parce que j'ai fait ma journée et que je suis fatigué). Fais une recherche.
P.S.:
N'utilise pas la méthode new. Oui, ça existe, mais c'est équivalent à [[alloc] init] qui est plus répandue parce que les méthodes d'init peuvent prendre des paramètres.
Par convention, les noms de classe commencent toujours par des majuscules.
Je vais opter pour la délégation, et merci pour les PS.
Cela me permettra de partir sur de bonne base /thumbsup.gif' class='bbc_emoticon' alt='' />
Point de vue explication sur certain site, on pourrait parler d'usine à GAZ..
Si j'ai compris, voilà ce que j'ai fait (qui bien sur ne tourne pas encore lol ,mais savoir si je suis sur la bonne piste me rassurerait sur la délégation) /rolleyes.gif' class='bbc_emoticon' alt='::)' /> :
.h ->
.m ->
Comme le montre ma seconde méthode, mon NSTextField de la fenêtre principale devrait disparaà®tre. Ce qui bien sur n'est pas le cas.
Je pense et je suis même persuadé que mon code est une source d'erreurs que le compilateur ne détecte pas...
Les forums et tuto sont géniaux mais je pense que votre avis et réflexions sont indispensables.
Merci de votre temps /cliccool.gif' class='bbc_emoticon' alt=' ' />
One more time /rolleyes.gif' class='bbc_emoticon' alt='::)' />
Tu crées une nouvelle fenêtre, donc aucune chance que tu puisses modifier celle déjà affichée !
Il te faut utiliser un fenêtre de dialogue ( en sheet ?)
Je pensai qu'il était possible de modifier depuis une autre fenêtre.
Merci pour ton idée! J'utilise:
Hors ma seconde fenêtre est dans un autre .xib ce qui semble posé quelques soucis, puisque runModalForWindow n'ouvre que NSWindow et non NSWindowController (pour charger mon xib) /sad.png' class='bbc_emoticon' alt=':(' />
A croire que tout va contre moi!!!
Cette fenêtre s'obtient par -[windowController window]
Merci pour ta réponse, parle tu de délégation??
Pour ce qui est de la boite de dialogue j'ai réussi à l'ouvrir mais elle n'a aucun contrôle sur la fenêtre principale :
Existe-t-il une autre solution pour modifié une fenêtre depuis une autre fenêtre??
Si quelqu'un à une idée je suis preneur /rolleyes.gif' class='bbc_emoticon' alt='::)' />
Palette est un singleton et communique avec les Documents via un protocole.
Pour adapter cet exemple à ses besoins, dupliquer le nib Palette et sous classer UtilityWindowController (UPalette dans mon exemple)
Je trouve quand même que pour gérer une fenêtre depuis une autre ou même à sa fermeture cela est très compliqué!!
Alors que dans certain langages, tel que C#, 2 lignes suffisent! /crazy.gif' class='bbc_emoticon' alt=' ' />
.h:
et pour le .m
J'ai recommencé un petit projet pour pouvoir réussir, et je pense que je n'en suis pas loin /smile.png' class='bbc_emoticon' alt=':)' />
Si quelqu'un à une idée.
Et merci à tous de votre aide...
J'accède à mon instance lorsque j'appuie sur mon bouton présent sur ma seconde fenêtre.
Le soucis est lorsque j'accède à cette instance je n'accède pas à TestModification (principe de délégation dont je me suis inspiré grâce à ton lien http://forums.mediab.../apple/protocol[font=helvetica, arial, sans-serif] )[/font]
Alors que si je déclare la classe Mainframe (les lignes en commentaires) j'accède TestModification mais ceci n'a aucun impact sur NSTextField.
Mais ce que je comprend pas c'est le @selector :
Je suis désolé de vous embêter avec mes erreurs de débutant, mais la je parlerai plus d'incompréhension...
@selector(sheetDidEnd: returnCode: contextInfo:)
no comprendo !
BeginSheet ouvre une seconde fenêtre qui possède un bouton pour modifier la fenêtre principale.
Ou est-ce que je doit mettre le code suite à l'appuie du bouton??
Tout semble fonctionner hors bizarrement je ne passe pas dans :
Je passe correctement dans fermsheet pourtant /crazy.gif' class='bbc_emoticon' alt=' ' />
Si la fenêtre se ferme, c'est que tu passes par sheetDidEnd:
L'exécution du programme n'est pas bloqué par celui-ci /sad.png' class='bbc_emoticon' alt=':(' />
Dans la method sheetDidEnd, passer un orderOut à sheet provoque la fermeture (ou le passage hors écran selon choix fait pour la fenetre dans IB). C'est aussi là qu'on teste le bouton cliqué (valeur de returnCode) lors de la fermeture, pour savoir si c'est annuler ou valider.
Dans l'IBAction de fermeture on peut ajouter :
NSApp endSheet: returnCode: je crois qui permet de donner une valeur NSOKButton ou à returnCode
Pour l'affichage/masquage de controls sous condition, on peut utiliser un binding de la propriété Hidden du control avec une propriété BOOL de l'appcontroller par exemple, qui est mise à YES ou NO dans la 2ème fenêtre (Cf. KVO)