2009-06-04 5 views
2

Je fais mon chemin à travers les livres Hilgrass et Kochan. Faire mes propres expériences pour en approfondir mon apprentissage, je veux simplement créer une interface de cacao avec 4 textfields, 3 qui acceptent les numéros et le 4 qui affiche la somme de l'autre 3. Je peux le faire en utilisant un bouton pour faire le calcul mais ce que je vouloir faire est de l'autoupdate chaque fois que l'une des 3 entrées est changée.NSNotification/Liaisons?

J'ai cherché une leçon qui couvre cela, aussi bien dans les livres et en ligne mais ne peut pas trouver un, donc soit il est vraiment simple et je manque quelque chose ou ce n'est pas si simple. Il semble que la manière conventionnelle de faire ceci est avec NSNotifactions mais c'est peut-être possible avec des reliures aussi bien?

Quelle est la manière standard de le faire est le cacao et est-il un tutoriel que quelqu'un connaît?

Cheers, Morgan

Répondre

3

Chapitre 7: codage des valeurs-clés; Key-Value L'observation de la "Programmation Cocoa pour Mac OS X" de Hilgrass ou Apple documentation on Key-Value Coding peut vous aider à accomplir cette tâche.

Voici mon exemple de projet Xcode: http://dl.getdropbox.com/u/344540/stackoverflow/AutoAdd.zip. Vous pouvez contrôler la manière dont la mise à jour s'effectue en utilisant l'onglet "Liaisons" de l'inspecteur pour les champs NSTextField dans Interface Builder. Il y a aussi d'autres gemmes dans cet onglet.

+0

Merci pour l'exemple de code! Très appréciée. Je vais étudier les trucs KVC. À votre santé! Morgan –

+0

@phi Juste ce que je cherchais, merci pour l'exemple de code. – David

0

NSControl (et donc NSTextField) a une NSControlTextDidChangeNotification de notification qui sera envoyée chaque fois que le texte change.

Ainsi, vous pouvez vous inscrire à cette notification sur vos trois champs de texte puis mettez à jour votre champ de calcul.

J'ai pris ceci un peu plus loin, en créant une sous-classe de NSTextField appelée ActionOnChangeTextField qui appelle automatiquement son action chaque fois que le texte change. Il vous suffit donc de définir la classe des trois champs de texte à ActionOnChangeTextField et de connecter le sélecteur à votre méthode de calcul de mise à jour.

@interface ActionOnChangeTextField : NSTextField { 

} 

@end 

@implementation ActionOnChangeTextField 

- (void) doTextChangedAction:(NSNotification*)notification; 
{ 
    [[self target] performSelector:[self action]]; 
} 

- (void) awakeFromNib; 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(doTextChangedAction:) 
               name:NSControlTextDidChangeNotification 
               object:self]; 
} 

- (void) dealloc; 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 
} 

@end