2010-02-16 6 views
0

J'ai créé une classe, qui permet d'entrer facilement le montant à un prix donné de la même manière qu'un guichet automatique vous permet de saisir un montant, l'utilisateur n'entre pas la décimale.Objective-C iPhone - Déléguer une IBAction d'une classe à une autre? Cela peut-il être fait?

C'est une classe générique appelée (AmountPicker), de sorte qu'il peut être utilisé parmi beaucoup d'autres classes. Je l'utilise en invoquant la méthode presentModalViewController, cette classe utilise un fichier nib. À l'intérieur du xib, il y a un champ de texte caché et une étiquette avec un bouton terminé dans la barre de navigation. Le bouton done est un IBAction connecté à une méthode nommée doneButtonPressed. Je veux savoir s'il est possible de déléguer cette méthode à une autre classe, de sorte que la logique à l'intérieur de la méthode puisse différer de celle déjà définie dans la classe amountPicker. La raison en est, j'utilise la classe amountPicker en deux endroits un pour entrer un achat, qui prend le texte d'étiquette et assigne la valeur à une variable dans l'appDelegate, c'était correct quand je l'ai juste utilisé dans une classe, mais maintenant il y a un detailTableViewController de l'achat et cette vue devra également fournir un moyen de changer les données dans le cas où il a été entré mal. Donc, dans la vue détaillée j'utilise un en-tête personnalisé, l'en-tête personnalisé a un textField pour le nom de l'achat, un bouton pour activer le AmountPicker, et une étiquette pour le montant, quand le bouton montant est enfoncé la classe AmountPicker apparaît et l'utilisateur entre le montant et appuie sur le bouton done, MAINTENANT, c'est ici que j'ai besoin de changer la logique pour doneButton, au lieu d'utiliser une variable dans appDelegate.

Je pensais que le DetailTableViewController pouvait agir en tant que délégué pour la classe amountPicker et remplacer la méthode doneButtonPressed, de sorte que amountLabel puisse être mis à jour avec le nouveau montant.

Est-ce possible, sinon quelle est la bonne façon?

Répondre

2

Votre réflexion est juste à quel point la délégation est normalement utilisée. Ce que je ferais est de créer un protocole Objective-C, peut-être AmountPickerDelegate. Ensuite, dans votre interface pour le AmountPicker, vous auriez ceci:

@interface AmountPicker : NSObject { 
    NSString *someValue; 
    ... 
    id <AmountPickerDelegate> delegate; 
} 

@property (assign) id <AmountPickerDelegate> delegate; 

@end 

Ensuite, dans votre classe déléguée, vous feriez ceci:

@interface DetailTableViewController : UITableViewController <AmountPickerDelegate> 

Enfin, dans la classe AmountPicker d'origine, vous pourriez appeler quelque chose comme ceci:

[delegate amountPickerDidPressDoneButton]; 

qui s'exécuterait dans le délégué.

Questions connexes