2010-03-05 11 views
5

Ho un problema in cui voglio chiamare una funzione definita in un controller di visualizzazione da un altro controller. Provo quello che sembra llke centinaia di configurazioni diverse e nulla sembra funzionare.Chiamare una funzione da un altro controller di visualizzazione per iphone

Ho pubblicato il codice di base e speravo che qualcuno potesse dirmi come lo avrebbero fatto. Fondamentalmente tutto ciò che voglio fare è chiamare la funzione MYBPress definita nello SwitchViewController dal GameViewController quando si preme il pulsante dealB. Qualsiasi aiuto sarebbe molto apprezzato. PS: Ho codificato per un lungo periodo di tempo, ma sono realtivly nuovo a 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 

risposta

5

"Ciao a tutti, ho un problema dove voglio chiamare una funzione definita in un controller di vista da un altro controllore. Cercherò quello che sembra llke centinaia di configurazioni diverse e nulla sembra funzionare. "

Questo perché è un cattivo design. I controllori non dovrebbero parlare direttamente l'uno con l'altro.

È consigliabile prendere in considerazione l'utilizzo di delegati, notifiche o qualche entità centrale condivisa.

+0

Grazie per l'input. È un cattivo design? Forse, ma la domanda è, può essere fatta. –

+0

Ehi, St3fan, sono tornato indietro e ho provato di nuovo a usare NsNotificationCenter e l'ho fatto funzionare. L'avevo provato in precedenza ma ovviamente non lo stava facendo bene. La mia frustrazione mi ha portato a provare metodi non convenzionali :-) Il tuo commento mi ha fatto rivedere e l'ho capito, quindi grazie per l'input. –

1

Perché non basta un pulsante per inviare entrambi i messaggi direttamente ai rispettivi controller? Le istanze di UIButton sono intrinsecamente in grado di inviare più messaggi a più destinazioni. Per configurare il pulsante, è possibile inviare il seguente messaggio come numero di volte necessario:

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

È inoltre possibile collegare il pulsante in Interface Builder per fare la stessa cosa. O mescolare e abbinare al contenuto del tuo cuore.

+0

Grazie per quel po 'di informazioni. Non ho mai pensato di provarlo ma lo ricorderò per riferimenti futuri. –

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

Questo ha funzionato perfettamente per me. – sridvijay

+0

@Rick è fantastico ... Grazie – death7eater

Problemi correlati