2010-08-21 4 views
1

Dans mes applications, j'ai une barre d'outils avec un bouton à l'intérieur. Lorsque vous appuyez sur ce bouton, une feuille d'action apparaît et vous pouvez changer le langage des applications. Je veux mettre une barre d'outils dans beaucoup de vue, mais je veux utiliser le même objet, pas copier-coller dans toute ma vue. Donc, je crée un UIViewController avec un fichier nib, ce fichier nib containt mon toolBar. Maintenant, dans un UIView, je faisObjet n'appelant pas le bon contrôleur

toolBar *objToolBall = [[toolBar alloc] initWithNibName:@"toolBar" bundle:nil]; 

objToolBall.view.frame = CGRectMake(0, 418, 320, 44); 

[self.view addSubview:objToolBall.view]; 

[objToolBall release]; 

mon problème est que lorsque j'ai appuyé sur le bouton dans la barre d'outils, le programme essayer de trouver la méthode « clickButtonLanguage » dans le fichier que je crée l'objet, et non "toolBar.m".

Comment puis-je aller dans la méthode "toolBar.m"?

+0

Alors, avez-vous des erreurs? Comment définir une action sur le bouton? Consultez également cette question - http://stackoverflow.com/questions/3538589/unrecognized-selector-error-when-implementing-a-valuechanged-action-from-a-uislid/3538781. Vous pouvez avoir des problèmes avec votre code parce qu'obtenToolBall est désalloué et ne peut naturellement pas répondre aux messages après cela ... – Vladimir

+0

Je mets l'action dans l'interface builder, mon UIViewController "toolBar" a sa méthode "clickButtonLanguage" – alex

+0

Ok, je supprime le [release objToolBar] et cela fonctionne, mais quand je libère mon objet? – alex

Répondre

0

Le problème n'est pas la version (en supposant que votre viewController d'origine et sa vue associée sont toujours présents). La version a du sens: vous avez créé un objet, vous lui avez transféré la responsabilité de la vue à laquelle vous l'avez ajouté, et maintenant vous devez le libérer pour qu'il ne fuie pas. Alors ne laissez pas tomber cette ligne.

Vous obtenez l'appel de méthode dans votre contrôleur de vue d'origine, car c'est exactement ce que vous avez connecté à. Si vous voulez vous connecter à d'autres IBActions vous devrez les ajouter par programme avec

[objToolBall addTarget:action:forControlEvents:] 

puis retirez les objets que les auditeurs des appels correspondant à -removeTarget:action:forControlEvents.

Questions connexes