2010-07-24 5 views
1

Donc, j'ai une classe ViewController qui est ma première vue, je lui ajoute ensuite une sous-vue, code pseudo ci-dessous;Objective-C Classes

ViewController2 *viewController2 = [[ViewController2 alloc] init]; 
[self addSubview:viewController2.view]; 

Ma question est, dans ViewController1, j'ai une méthode qui fait une animation et supprime la vue. Comment puis-je appeler cette méthode à partir d'un bouton sur ViewController 2?

J'ai essayé de faire quelque chose comme dans ViewController2 ...

ViewController1 *viewController1 = [[ViewController1 alloc] init]; 
[viewController1 back]; //Trying to call method in other class from ViewController2 

Et son drôle parce que dans la méthode « retour » sur ViewController1, j'ai une déclaration NSLog, et il fonctionne, mais aucun des autres codes travaux. Donc, je sais que la méthode est appelée depuis mon autre classe, mais seule la partie NSLog s'exécute? Aucune suggestion.

donc en gros je veux appeler une méthode de ViewController1 de ViewController2

Répondre

1

Vous ne pouvez pas créer une deuxième instance de ViewController1 et obtenir l'effet que vous recherchez. Vous devez l'appeler sur l'instance déjà créée.

Dans ce cas, vous pouvez l'accomplir en créant un fichier ivar dans ViewController2 pour vous rappeler qui est le parent et l'affecter lorsque vous ajoutez l'autre VC. Disons que vous appelez le ivar owningViewController1. Ajouter une propriété pour en ViewController2.h et synthétiser en haut de ViewControler2.m, puis changez votre exemple:

ViewController2 *viewController2 = [[ViewController2 alloc] init]; 
[self addSubview:viewController2.view]; 
[viewController2 setOwningViewController1:self]; 

Alors, ne vous embêtez pas créer une nouvelle instance ViewController1, il suffit d'utiliser celui sauvé :

[owningViewController1 back]; 
+0

Ahhh qui a fait l'affaire! Merci beaucoup John, je l'apprécie vraiment. –

+0

La solution que John m'a donnée a fonctionné parfaitement et a fait l'affaire. Ma dernière question est maintenant - est-il de toute façon de se débarrasser de l'avertissement "'UIViewController' peut ne pas répondre à '-back'"? La méthode fonctionne, il suffit d'obtenir l'avertissement parce que c'est défini ailleurs. –

+0

Des sons comme l'ivar est défini comme un UIViewController, pas comme un ViewController1. Dans l'en-tête ViewController2 vous pouvez ajouter "@class ViewController1;" Pour transmettre la classe VC2, dans ViewController2, assurez-vous que vous #importez "ViewController1.h" pour que le compilateur connaisse toutes les méthodes VC1. –

Questions connexes