J'ai récemment fait beaucoup de programmation en Objective-C, et je suis revenu dans le développement de l'iPhone. J'ai fait beaucoup de programmation en utilisant MVC dans d'autres langages/frameworks, mais je veux juste m'assurer que j'utilise MVC correctement dans mon développement iPhone.iPhone: bon usage de View and View Controller
J'ai créé une nouvelle application iPhone Utility, qui crée deux vues: MainView et FlipsideView. Les deux ont un contrôleur (FlipsideViewController et MainViewController) et le fichier XIB de leurs propres. Ce que j'ai fait est de mettre les variables IBOutlet UIControl myControl
dans mes fichiers MainView.h ou FlipsideView.h, puis d'attacher les contrôles dans Interface Builder à ces variables. Puis j'ai mis toutes les méthodes IBAction SomeAction myAction
dans les fichiers MainViewController.h et FlipsideViewController.h et en attachant les événements à ces méthodes dans Interface Builder.
Cela semble être conceptuellement correct, mais semble causer des problèmes. Dites que j'ai un bouton qui, lorsqu'on clique dessus, modifie le texte d'une étiquette. Le contrôleur n'a donc aucune idée du nom de la variable de l'étiquette dans le gestionnaire d'événements OnTouchUp pour mon bouton. Donc, je fais un @property
pour cela. Mais puisque la propriété MainViewController.view
n'est pas de type MyView
, j'obtiens des avertissements ou des erreurs chaque fois que j'essaie d'accéder à ces propriétés à partir du contrôleur de vue.
Je le fais correctement? Y a-t-il une meilleure manière de faire cela? Si cela est correct, comment puis-je travailler correctement avec ces variables sans recevoir d'avertissement ou d'erreur?
Merci
Voici un code montrant ce que je fais:
MainView.h
#import ...
@interface MainView : UIView
{
IBOutlet UILabel* label;
IBOutlet UIButton* button;
}
@property UILabel* label;
@property UIButton* button;
@end
MainViewController.m
-(void) buttonTouchUp:(id) sender
{
self.view.label.text = @"The button was pressed!"; //This gives error because label is not in the view structure or union
[self.view label].text = @"The button was pressed!"; //This gives a warning
}
Je sais que je peux jeter la vue être du bon type, mais cela semble être un travail de hacking. Je sais que je peux vivre avec l'avertissement, mais un avertissement me dit que je fais quelque chose que je ne devrais probablement pas faire. Je ne crois pas que le SDK m'aurait obligé à faire quelque chose comme ça tout le temps.
Je dois juste me méprendre sur ce que le View
est censé être et je l'utilise incorrectement.
"Le contrôleur n'a donc aucune idée du nom de la variable de l'étiquette dans le gestionnaire d'événement OnTouchUp pour mon bouton, donc je lui ai attribué un @property, mais comme la propriété MainViewController.view n'est pas de type MyView, j'obtiens des avertissements ou des erreurs chaque fois que j'essaie d'accéder à ces propriétés à partir du contrôleur de vue. " - pourriez-vous poster le code pertinent? –