2010-11-26 16 views
0

J'ai un contrôleur de vue "ResultsViewController" avec un bouton appelé emailbutton. lorsque ce bouton est pressé, je veux qu'une fonction soit appelée depuis une autre vue appelée "Illusions_AppViewController" (ces deux viewcontrollers ne sont pas liés).Le délégué n'est pas appelé

donc je défini un protocole dans le "ResultsViewController.h":

@protocol ResultsViewDelegate <NSObject> 
@optional 
- (void) resultspage; 

@end 

@interface ResultsViewController : UIViewController 
{ 
    id<ResultsViewDelegate> mydelegate; 
    UIButton *emailButton; 
} 
@property(nonatomic,retain) IBOutlet UIButton *emailButton; 
@property (nonatomic,assign) id<ResultsViewDelegate> mydelegate; 
@end 

Dans le ResultsViewController.m:

-(IBAction)emailButtonPressed:(id)sender 
{ 

    NSLog(@"entered emailbuttonpressed");// the app enters this method and gets hanged 

    if ([mydelegate respondsToSelector:@selector(resultspage)]) { 
     NSLog(@"entered respondstoselector");// this is never displayed in the log-showing that the delegates doesnt respond to selector 
     [mydelegate resultspage]; 
    } 

} 

Dans mon autre point de vue, "Illusions_AppViewController.m":

- (void)resultspage{ 

    NSLog(@"Entered results page"); 
    ResultsPageController *resultspagecontroller = [[ResultsPageController alloc] initWithNibName:@"ResultsPageController" bundle:nil]; 

    resultspagecontroller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:resultspagecontroller animated:YES]; 
} 

Apprécierait si quelqu'un peut m'aider avec ceci. Je n'ai aucune idée de pourquoi le délégué n'est pas appelé. l'application est pendu dès que j'appuie sur le bouton email. Merci!

+0

S'il vous plaît prendre le temps de formater votre code correctement à l'avenir. – JeremyP

Répondre

-1

Pour répondre à votre deuxième question, vous êtes sur la bonne voie. Il suffit de créer une instance de votre Illusions_AppViewController et appeler la méthode illusionsView en elle au lieu d'utiliser:

- (IBAction)emailButtonPressed { 
    illusions_AppViewController *illusionsview = [[illusions_AppViewController alloc]init]; 
    [illusionsview resultspage]; 
    [illusionsview release]; 
} 
+0

Merci pour l'aide ... mais ça ne marche pas même alors. la page de résultats n'est jamais affichée :( – Anam

+0

Cela ne fonctionne pas parce que vous essayez de pousser une vue à partir d'une vue qui n'est plus visible.Jugé par votre code sur Je me demande pourquoi avez-vous besoin d'appeler Illusion_AppViewController dans le premier Pourquoi ne pas pousser votre ResultsPageController directement à partir de votre méthode emailButtonPressed? – Rog

-1

ou est-il une autre façon de réaliser ce but. J'ai juste besoin que la fonction de la page de résultats soit appelée à chaque pression sur le bouton. i essayé d'utiliser cette façon:

ResultsViewController.m

-(IBAction)emailButtonPressed:(id)sender 
    { 

NSLog(@"entered emailbuttonpressed"); 

illusions_AppViewController *illusionsview = [[illusions_AppViewController alloc]init]; 
[illusionsview performSelector:@selector(resultspage)]; 
} 

maintenant la fonction page de résultats est appelé, mais le resultspagecontroller qu'il a besoin d'afficher en tant que modalviewcontroller jamais appears.the pend app, et aucune erreur dans la console non plus.

+0

voir ma réponse éditée plus haut – Rog

1

L'implémentation/l'utilisation des délégués est incorrecte. Veuillez vous référer à ce tutorial.

Espérons que cela aide.

Merci,

Madhup