J'essaie d'envoyer des actions à partir de touches à un contrôleur autre que celui agissant en tant que propriétaire du fichier. J'ai quatre zones distinctes de l'écran que je voudrais gérer par quatre contrôleurs distincts (buttonController, toolbarController, textController et graphicController) avec un cinquième contrôleur (mainController) contrôlant les quatre autres. MainController est également associé au propriétaire du fichier. Pour obtenir touches pour être traitées par mainController est facile:Comment envoyer des actions à des cibles autres que le propriétaire du fichier?
fichier MainController.h:
- (IBAction)buttonIsTouched:(id)sender;
fichier MainController.m:
- (IBAction)buttonIsTouched:(id)sender {
..handle button touch event etc.
}
Puis, dans Interface Builder, associer le bouton Touch Down événement avec le propriétaire du fichier et sélectionnez buttonIsTouched
et c'est parti. Tout fonctionne bien. Toutefois, lorsque je fais exactement la même chose pour un contrôleur qui n'est pas le contrôleur du propriétaire du fichier, l'application se bloque. Voici ce que j'ai fait:
Créer quatre contrôleurs comme variables d'instance de mainController. Les instancier dans -[MainController viewDidLoad]
. Fournissez une méthode de gestion des boutons exactement comme ci-dessus. Dans Interface Builder, faites glisser un modèle Object depuis Library (quatre fois) dans le navigateur mainController.xib. Définissez le type de ces objets sur ButtonController
, ToolBarController
, TextController
et GraphicsController
respectivement. Associez l'événement bouton Touch Down avec l'objet ButtonController
et sélectionnez l'entrée buttonIsTouched
(dans la petite boîte de pop-up) Construire et exécuter l'application Cliquez sur le bouton Crash - désolé, je n'ai pas écrit le code d'erreur, mais il était proche de INVALID_ACCESS
Bien sûr, je peux avoir toutes les entrées aller d'abord à mainController puis déléguer vers le bas pour chaque contrôleur, mais cela semble une solution inélégante d'autant plus que je veux que les contrôleurs inférieurs pour faire des travaux avant la messagerie en amont à mainController. Avoir à passer par mainController et puis revenir en arrière si je suis irritable.
Si quelqu'un sait comment faire cela et a un exemple de code qui fait quelque chose de similaire à ce que je veux faire, je l'apprécierais.
ac