Contrôle des notifications
muqaddar
Administrateur
Salut,
Si NSComboBoxSelectionDidChangeNotification est une notification qui nous permet par exemple d'ajouter des observateurs sur une comboBox par le biais de la méthode :
comment procéder pour des NSMatrix (radio button) et des checkboxes, qui, apparemment n'ont pas de notifications, comme les tableView ou les textFields ?
Si NSComboBoxSelectionDidChangeNotification est une notification qui nous permet par exemple d'ajouter des observateurs sur une comboBox par le biais de la méthode :
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(recepteurDeChangements:) name:NSComboBoxSelectionDidChangeNotification object:nil];
comment procéder pour des NSMatrix (radio button) et des checkboxes, qui, apparemment n'ont pas de notifications, comme les tableView ou les textFields ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ceci dit, si ces contrôles agissent sur les préférences, tu peux enregistrer des objets pour les notifications du nsuserdefaults.
Ouais, c'est plus contraignant, surtout avec 80 checkboxes à associer à une action...
Dans mon cas, il ne s'agit point de préférences, mais simplement contrôler que tout un tas de champs de différents types ont changé ou non.
merci.
Oui, ça je l'ai déjà fait, mais ce que je voulais savoir c'est pour le contrôle "automatique" des autres notifications contrôlées par le [NSNotificationCenter defaultCenter]. Par exemple, dès qu'il voit une tableView avec NSTableViewSelectionDidChangeNotification, il va signaler la notif au changement de sélection, moi je voudrais qu'il la signale que si la tableView a un tag égal à telle valeur.
Ou bien si tu as un outlet vers tes tables view, tu peux n'enregistrer un objet que pour les notifications d'une seule table.
Eddy: Grilled.
[EDIT]zut, grilled oui ! :P
=>
2005-08-01 15:58:32.586 Vinitheca[3704] Notification : 5
2005-08-01 15:58:32.588 Vinitheca[3704] Notification : 8
2005-08-01 15:58:32.597 Vinitheca[3704] Notification : 4
2005-08-01 15:58:32.599 Vinitheca[3704] Notification : 3
2005-08-01 15:58:32.599 Vinitheca[3704] Notification : 1
2005-08-01 15:58:32.600 Vinitheca[3704] Notification : 2
Merci !
ma question est bete peut etre mais je suis debutant dans l'objective c et la derniere fois que j'ai programe c'etait pour VB.
Alors, mon probleme:
J'ai monte une petite interface avec des textField's et deux combobox et un petit buton qui calcule des chose fontion de ces combobox. Apres avoir galere un peu pour recuperer la valeur d'une combobox (valeurs numeriques, en passant par indexOfSelectedItem et un switch ) j'ai pu recuperer la valuer tout simplement par:
maValeurCombo= [[maCombo objectValueOfSelectedItem]intValue]; tout bete mais j'ai mis trois jours pour trouver.
Maintenant je veux initialiser maCombo avec une valeur que l'utilisateur ne doit forcement modifier. Si j'utilise IB pour definir cette valeur de base le retour va etre errone et pas la valeur que je veux. Cette valeur se trouve sur la troisieme position dans ma combo (les valeurs sont stockes interne et ne vont plus changer).
J'ai creusé un peu et j'ai trouvé ce code sur le site d'Apple:
[myComboBox selectItemAtIndex:2]; // First item is at index 0
[myComboBox setObjectValue:[myComboBox objectValueOfSelectedItem]];
Ma question est ou j'implement ce code: dans la methode qui gere le bouton ? je dois creer un autre methode qui gere les valeurs par defaut?
je l'integre dans main.m ou dans maFonction.h ou maFonction.m?
J'ai pense aussi a utiliser :
NSComboBoxSelectionDidChangeNotification
et si celui a ete change je recupere la valeur sinon je la connais deja parcque c'est moi qui la imposé. Mais je ne sais pas comment l'ecrire et ou l'ecrire.
:why?:
Tu pourras dés lors configurer ton menu directement dans IB, et toujours récupérer l'indice de l'article sélectionné par -indexOfSelectedItem.
Pour sélectionner l'article par défaut, le plus simple est de le sélectionner sous IB, puis de sauvegarder. Le problème, c'est que le traducteur italien de ton application peut le changer par mégarde.
Si tu veux utiliser le code donné par Apple, il faut le mettre dans la méthode -(void) awakeFromNib de ton contrôleur. À lire:
http://www.cocoa.fr/2008/11/19/vos-debuts-en-cocoa/
P.S.: Il vaut mieux créer un fil de discussion différent quand le sujet n'est exactement le même.
Moi je vois différemment les choses: apple dit que c'est une combobox, elle répond bien comme une combobox et elle est définie bien dans la doc comme une combobox et tu me dis qu'elle n'est pas une combobox? J'ai fais une recherche avant de poster quand même... http://developer.apple.com/documentation/Cocoa/Conceptual/ComboBox/Tasks/SettingComboBoxValue.html
Mon combo contient: 2,1,0.7,0.5 SI je le sélectionne par default 0.7 , lors du lancement du calcul la valeur : maValeurCombo= [[maCombo objectValueOfSelectedItem]intValue]; retourne une autre valeur à la conqui n'as pas de sens et je ne sais pas comment elle est trouvé.
D'ailleurs quand j'impose la valeur par default dans IB , l'IB le considère comme le titre de la combo. Je vais essayer se soir le awakefromnib.
Mais comment je peux implémenter quand même le: NSComboBoxSelectionDidChangeNotification.
Merci pour ta reponse.
Tu ne nous donnes pas beaucoup de renseignement, malheureusement.
Traditionnellement, il est facile d'initialiser des éléments d'interface stockés dans un .nib en implémentant la méthode awakeFromNib.
Mais pour ça, il faut en savoir un peu plus sur ton projet :
- où est stockée ta combobox ? Dans MainMenu.nib ?
- dans quelle classe (fichier .h) as tu le IBOutlet id myComboBox; ?
- si cette classe existe, comment est elle instanciée ? A partir de IB ?
Je pense que ma réponse était plutôt claire, mais je vais la reformuler:
- Une combo box a un but précis: permettre de taper n'importe quelle valeur, ou en suggérer une à l'utilisateur. -> NSComboBox
- Quand on veut offrir le choix parmi plusieurs valeurs prédéterminées, on utilise un bouton pop-up (ou bien des boutons radios). -> NSPopUpButton
Il m'a semblé que ce que tu voulais faire ce rapprochait de ce deuxième choix.
Deuxièmement:
Non, on n'utilise pas les notifications pour connaà®tre la valeur d'un contrôle (que ce soit une combo ou un pop-up). Les contrôles envoient des actions lorsqu'ils sont actionnés, comme expliqué dans l'article dont je t'ai donné le lien.
Troisièmement:
À ton avis, quelle est la classe de l'objet renvoyé par -[NSComboBox objectValueOfSelectedItem] ? Es-tu sûr que cet objet réponde à intValue ?
Essaie plutôt:
[myComboBox intValue]
#import "Fusebox.h"
@implementation Fusebox
- (IBAction) calculer_produit:(id)sender
{
float varialble_a, variable_b,produit;
int choix_multiplicateur;
choix_multiplicateur= [[combo_multiplicateur objectValueOfSelectedItem]intValue]; //2,3 ou 1
produit=variable_a*variable_b*choix_multiplicateur;
//J'impose le format du produit affiché
NSNumberFormatter * numeroFormat =[[[NSNumberFormatter alloc] init]autorelease];
[numeroFormat setFormat:@#,###.00;0.00;(#,##0.00)];
[[resultat cell] setFormatter:numeroFormat];
[resultat setFloatValue:produit];
}
@end
Maintenant si je selectionne une valeur du combobox le programme fait ce qu'il doit faire mais si je ne la touche pas (donc je veux utiliser la valeur par defaut) le resultat il est tout con.
Bon, j'ai trouvé grace a No. Merci No.
Donc ce que j'ai apris aujourd'hui.:
- COMBOBOX: An NSComboBox is a kind of NSControl that allows you to either enter text directly (as you would with an NSTextField) or click the attached arrow at the right of the combo box and select from a displayed (“pop-upâ€) list of items. ==> c'est une combobox et elle repond bien a : maValeurCombo= [[maCombo objectValueOfSelectedItem]intValue]; si dans la combo sont de valeurs numériques
-NSComboBox et NSPopUpButton sont deux choses différentes qui donnent "presque" le même résultat
- - (void)awakeFromNib
{
[myComboBox selectItemAtIndex:2]; // First item is at index 0
[myComboBox setObjectValue:[myComboBox objectValueOfSelectedItem]];
} est utilisé pour initialiser les "variables" qui se trouvent entre les "curly braquets"
- je ne comprend toujours pas bien le fonctionnement de objective-c et c'est la troisième fois que j'essaye
Merci Ceroce, NO.
PS: Je sais Ceroce que tu m'a donne en premier la solution mais j'ai un défaut : je n'arrive as a lire le réponses sarcastiques.
Ce que tu essaies de faire depuis le début c'est du Cocoa à la façon du Visual Basic. Tu ne vas pas y arriver (ou alors avec des bidouilles monstrueuses, comme tu es en train de le faire), parce qu'ils fonctionnent très différemment.
Sous Visual Basic ou Visual C++, pour répondre à un clic sur un bouton, tu crées un objet qui hérite de la classe bouton, et tu modifies sa méthode mouseClicked.
Sous Cocoa, la classe NSButton possède une variable d'instance target, représentant sa cible, et fait un appel de méthode à cette cible.
Encore une fois, je te conseille fortement de lire l'article que je t'ai mis en lien.
je pense que je vais ouvrir un post pour le debutants. Merci de me rejoindre.
Merci, j'en ai la version en anglais depuis un moment mais...et j'en ai une pour "les nuls" elle est un peu vieille mais c'est avec elle que j'ai reussi a comprendre des choses.
J'aurai une question quand meme: pour faire simple , mais simple comme pour expliquer au cons:
comment decrirai toi le fonctionnement de objective-c? et avec quoi tu remplacerai les mots instance, methode, instancier.
meme cette question je la trouve bete et je ne suis pas convencu que c'est ce que je veux demander. :crackboom:- :crackboom:-
[size=6pt](j'ai honte de poster ça, mais bon)[/size]
"Voiture" c'est la classe, c'est le terme générique pour désigner tous les objets de ce type, et le décrire c'est à dire décrire :
- de quoi il est composé et ce qui le définit (roues, volant, une couleur, une immatriculation) = les variables d'instance de ta classe
- ce qu'il sait faire (démarrer, avancer, reculer, ...), les actions qu'il sait réaliser = les méthodes de ta classe
Après il existe plein de voiture, y'a la voiture à Paul, celle à Jean et celle à Sophie.
Chacune de ces voitures est une instance unique. On parle de "La voiture de Jean" pour désigner cette voiture explicitement.
D'ailleurs, la voiture de Paul pourra être bleue et immatriculée "1234 CC 35" et celle de Sophie être verte et immatriculée "5678 SP 28" : chaque instance de la classe Voiture a les mêmes variables d'instance (couleur, immatriculation, ...) mais ces variables peuvent avoir des valeurs différentes (couleur = bleu pour l'une, vert pour l'autre ...) pour chacun instance
Une classe est donc une sorte de "modèle générique" qui décrit comment est fait un objet de ce type, de quoi il est composé, ce qui définit l'objet et les actions qu'il peut réaliser (les méthodes), et ensuite tu peux avoir plusieurs instances de cette classe, donc plusieurs objets qui sont de ce type.
Si dans ton programme tu as 3 Voitures et 2 Assiettes, Voiture et Assiette sont des classes dont tu as 3 instances pour l'une et 2 pour l'autre. Tu as donc à un moment instancié 3 Voitures, c'est à dire créé 3 objets de type Voiture (dont la classe est Voiture).
Voilà j'espère que c'est plus clair