keyDown
iLandes
Membre
Bonjour,
Je bug sur un problème dans la comparaison de valeurs.
Voila le topo, j'ai fais une petite application et je voudrais détecter quand l'utilisateur de la vue frappe la touche flèche bas ou flèche haut sur son clavier.
J'ai crées un fichier d'entête
J'ai placé le code ci-dessous dans le fichier .m Je mets ici des extraits de code
Je sais que les codes des touches que je recherche sont 125 et 126, j'ai pu le vérifier grâce au dernier NSLog. Mais comment faire dans mon instruction if pour les détecter ? Je bug entre utiliser isEqual, isEqualTo et ==
De plus je suis certain qu'il existe des constantes pour remplacer 125 et 125 par NSarrowDown NSarroyUP, impossible de trouver dans la doc.
D'avance merci pour votre aide.
s
e
b
Je bug sur un problème dans la comparaison de valeurs.
Voila le topo, j'ai fais une petite application et je voudrais détecter quand l'utilisateur de la vue frappe la touche flèche bas ou flèche haut sur son clavier.
J'ai crées un fichier d'entête
<br />
@interface EDTVMidiNoteView : NSView<br />
J'ai placé le code ci-dessous dans le fichier .m Je mets ici des extraits de code
<br />
-(void)keyDown:(NSEvent *)theEvent<br />
{<br />
[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];<br />
}<br />
- (void)interpretKeyEvents:(NSArray *)eventArray<br />
{<br />
// NSNumber *keyCode = [eventArray valueForKey:@"keyCode"];<br />
if ([[eventArray valueForKey:@"keyCode"] isEqualTo:@"125"] ) {<br />
NSLog(@"+1");<br />
} else if ([[eventArray valueForKey:@"keyCode"] isEqualTo:@"126"]) {<br />
NSLog(@"-1");<br />
}<br />
NSLog(@"%@",[eventArray valueForKey:@"keyCode"]);<br />
}<br />
Je sais que les codes des touches que je recherche sont 125 et 126, j'ai pu le vérifier grâce au dernier NSLog. Mais comment faire dans mon instruction if pour les détecter ? Je bug entre utiliser isEqual, isEqualTo et ==
De plus je suis certain qu'il existe des constantes pour remplacer 125 et 125 par NSarrowDown NSarroyUP, impossible de trouver dans la doc.
D'avance merci pour votre aide.
s
e
b
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par contre c'est un NSArray, t'as un valueForKey dedans ?
http://stackoverflow.com/questions/275088/how-do-i-collect-key-input-in-a-video-game-style-cocoa-app
Voici le code que j'ai finalement adopté en attendant de trouver les constantes qui doivent forcément exister quelque part. Désolé je n'utilise pas la notation par "." car Aaron le déconseille (cf les livres d'Aaron Hillegass /smile.png' class='bbc_emoticon' alt=':)' /> )
Ce brave Aaron utilise la notation entre crochets pour accéder à une propriété afin que les lecteurs débutants ne confondent pas la notation pointée du C et celle de l'Objective-C :
L'argument d'Aaron est donc purement didactique. Je te conseille de suivre cette recommandation si :
Il semblerait que les Enum qui existaient en Carbon n'aient pas été intégrés dans Cocoa. Le plus simple est de les refaire soi même.
je vais voir les Enum comment ça marche
Tu considères pas ça " safe " ?
Non y a pas de problème, mais comme ce ne sont pas des valeurs abitraires, les erreurs eventutelles d'affectation sont plus facile à détecter
Ok, mais à ce moment-là , si je ne profite pas de ça, je préfère mettre un #define (un peu moins safe par contre). C'est pas tout à fait pareil, mais pour mon utilisation...
seb@stien:
Disons que si tu mets
B, va prendre la valeur +1 de la précédente s'il n'a pas de valeur associée.
Du coup, dans le cas précédent des valeurs des KeyCode_0 à 9, il suffisait juste d'intialiser la valeur du KeyCode_0...
Sans " ; ". Mais c'est moins safe. ça peut entraà®ner des erreurs à des niveaux plus complexes. Et c'est pré-processoré...
Un peu de recherche de ton côté sur les #define te permettra de voir les bons et mauvais côtés de ceux-ci.
justement j'aimerai être sur que j'analyse les flèches quelque soit le clavier
Les codes sont dans le framework HIToolbox/Events.h
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h
Pour un projet, je les avais effectivement extraits: