2010-03-05 13 views
5

Tengo un problema donde quiero llamar a una función definida en un controlador de vista desde otro controlador. Probaré lo que parece ser un centenar de configuraciones diferentes y nada parece funcionar.Llamar a una función desde un controlador de vista diferente para iphone

He publicado el código básico y esperaba que alguien pudiera decirme cómo lo harían. Básicamente, todo lo que quiero hacer es llamar a la función MYBPress definida en SwitchViewController desde el GameViewController cuando se presiona el botón dealB. Cualquier ayuda sería muy apreciada. PS: He codificado por un largo tiempo, pero estoy realtivly nuevo en Obj-C

// ------- SwitchViewController.h --------------- 
#import <UIKit/UIKit.h> 
@class GameViewController; 
@class OptionsViewController; 

@interface SwitchViewController : UIViewController { 
OptionsViewController *optionsViewController; 
} 

@property (retain, nonatomic) OptionsViewController *optionsViewController; 
@property (retain, nonatomic) GameViewController *gameViewController; 
-(IBAction)MyBPress:(id)sender; 
@end 


// -------- GameViewController.h ------------ 

#import <UIKit/UIKit.h> 

@interface GameViewController : UIViewController { 
    IBOutlet UIButton *dealB; 
} 
@property(nonatomic,retain) IBOutlet UIButton *dealB; 
- (IBAction)dealB:(id)sender; 
@end 


// ------- GameViewController.m 
#import "GameViewController.h" 

@implementation GameViewController 
@synthesize dealB;   // The Deal button 

- (IBAction)dealB:(id)sender 
{ 
    // Here is where I want to call the MyBPress function 
} 

@end 

Respuesta

5

"Hola a todos, tengo un problema en el que quiero llamar a una función definida en un controlador de vista de otro controlador. Probaré lo que parece ser un centenar de configuraciones diferentes y nada parece funcionar ".

Esto es porque es un mal diseño. Los controladores no deben hablar directamente entre ellos.

Debería considerar el uso de delegados, notificaciones o alguna entidad central compartida.

+0

Gracias por su aportación. ¿Es un mal diseño? Quizás, pero la pregunta es, ¿puede hacerse? –

+0

Hola, St3fan, volví e intenté de nuevo usando NsNotificationCenter y lo hice funcionar. Lo había intentado antes, pero obviamente no lo estaba haciendo bien. Mi frustración me llevó a probar métodos no convencionales :-) Tu comentario me hizo volver a verlo y me di cuenta, así que gracias por la contribución. –

1

¿Por qué no tener simplemente un botón para enviar ambos mensajes directamente a sus respectivos controladores? Las instancias de UIButton son intrínsecamente capaces de enviar múltiples mensajes a múltiples destinos. Para configurar el botón, puede enviar el siguiente mensaje tantas veces como sea necesario:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

También puede conectar el botón en el Interface Builder para hacer lo mismo. O mezcle y combine con el contenido de su corazón.

+0

Gracias por ese poco de información. Nunca pensé en probar eso, pero lo recordaré para futuras referencias. –

25
/* Ok, so based on a suggestion to use Notifications, I solved my problem. It's 
actually so simple, it ridiculous I had so much trouble with it. Thought I'd 
post it just in case some other newbie hits the same type issue. 
*/ 

// in the SwitchViewController.m I added this. This sets it up so 
// when the dealNotification 
// is triggered, the HideBar function I have defined in SwitchViewController 
// gets called. 
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(HideBar) name:@"dealNotification" object: nil]; 


// in the GameViewController.m where I want to call the function in the other controller, 
// I added this and it send the notification to run the function 
[[NSNotificationCenter defaultCenter] postNotificationName:@"dealNotification" object: nil]; 
+0

Esto funcionó perfectamente para mí. – sridvijay

+0

@Rick es genial ... Gracias – death7eater

Cuestiones relacionadas