2010-09-13 6 views
0

Ma vue principale PlayGameViewController a une sous-vue (en réalité 2 d'entre eux) appelée CardViewController.Parent VeiwControllers de ViewControllers

CardViewController crée des boutons programme

-(void) initialiseButtons 
    { 
    NSLog(@"initialiseButtons %d",totalButtons); 
    int ypos = playerImage.frame.origin.y + playerImage.frame.size.height + 42; 
    for(int i=0; i<totalButtons; i++) 
    {  
     StatView *sv = [[StatView alloc] initWithYPos:ypos]; 
     sv.tag = 100 + i; 
     [sv.overlayButton addTarget:self action:@selector(statTapped:) 
       forControlEvents:UIControlEventTouchUpInside]; 
     sv.overlayButton.tag = 10 + i; 
     [self.frontView addSubview:sv]; 
     ypos += 26; 
    } 
    } 

Il définit une fonction de rappel statTapped. Cela fonctionne bien et la fonction est appelée. Mais ... Toute la logique du jeu est dans PlayGameViewController donc j'ai besoin de gérer la fonction là-bas. J'ai essayé de supprimer la fonction de CardViewController et de l'implémenter dans PlayGameViewController mais l'appel n'a pas été transmis à la classe parente.

Y a-t-il des raisons d'y parvenir ou est-ce que je parle et que je suis fou?

Répondre

0

Je pense que vous avez deux options:

  1. Créer un délégué pour traiter votre méthode statTapped:. Vous pouvez en savoir plus sur les délégués et comment créer un ici: How do I create delegates in Objective-C?
  2. Utilisez NSNotification et ajouter un écouteur dans PlayGameViewController qui appellera la méthode statTapped: (également défini dans PlayGameViewController Puis, en CardViewController ont votre appel d'action de sélection d'une méthode qui affiche un. . notification PlayGameViewController sera recevoir cette notification puis exécutez les tâches spécifiées

Voici un exemple d'utilisation NSNotification.

Dans la méthode d » initialisation de PlayGameViewController, écrire:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(statTapped:) 
              name:@"statTapped" 
              object:nil]; 

En CardViewController, vous aurez envie de mettre un sélecteur à votre action de bouton que vous faites maintenant, mais au lieu de statTapped: vous aurez besoin d'un autre méthode qui contient ce code:

[[NSNotificationCenter defaultCenter] postNotificationName:@"statTapped" 
                object:self]; 

Par Ce faisant, votre PlayGameController sera propriétaire de la méthode statTapped.

Ne pas oublier d'enlever l'observateur dans votre méthode viewDidUnload:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"statTapped" object:nil]; 
+0

Ok je vous suis aussi loin que la mise en place du centre NSNotification en PlayGameViewController. La deuxième ligne est le code: [[NSNotificationCenter defaultCenter] postNotificationName: @ objet "statTapped": self]; Est-ce que cela est appelé depuis ma méthode startTapped dans CardViewController? Puis finalement j'implémente une méthode appelée startTapped dans PlayGameViewController qui sera appelée comme résultat de tout le code ci-dessus. –

+0

Oui, vous l'avez. – Calvin

Questions connexes