2013-09-23 9 views
11

So che ci sono duplicati di questa domanda ma la mia situazione è diversa qui.Chiamare il metodo UIViewController dal delegato dell'app

Quando l'utente torna a casa (void)applicationDidEnterBackground viene richiamato dalla classe AppDelegate. Tuttavia, una volta che l'utente preme il tasto home, non voglio che l'utente veda di nuovo questo controller di visualizzazione, quindi ho un metodo chiamato (void)goToBeginning che passa a un altro controller di visualizzazione. Voglio essere in grado di chiamare questo metodo da AppDelegate. Non voglio veramente usare NotificationCenter per questo. Anche la soluzione scelta qui: Calling view controller method from app delegate non funziona per me in quanto inizializza un nuovo oggetto mentre voglio essere in grado di chiamare un oggetto che è già nella vista. Come lo posso fare? Sto usando iOS 7 e XCode 5.

+0

Ottima domanda +1, ho contrassegnato come duplicato, poiché si tratta di concetti simili di una classe che chiama un'altra classe, nel tuo caso si desidera ottenere il riferimento per la classe istanziata (controller vista), in modo da poter interagire con l'interfaccia utente elementi, come le visualizzazioni ... La domanda che considero originale è di 4 anni fa e ha molti punti di vista e voti. –

risposta

42
  1. Notifica. Ma tu non vuoi questo.
  2. È possibile ottenere il riferimento a quello che viewController nel AppDelegate. Di chiamare quel (void)goToBeginning metodo nel (void)applicationDidEnterBackground

Per esempio: Nella tua ViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    appDelegate.myViewController = self; 
} 

E nel tuo AppDelegate:

@class MyViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (weak, nonatomic) MyViewController *myViewController; 

@end 

E nell'attuazione s' il AppDelegate:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    [self.myViewController goToBeginning]; 
} 
+0

Grazie, funziona bene –

+0

@Bryan Non io, l'OP non lo voglio. "Non voglio davvero usare' NotificationCenter' ". Dovresti leggere attentamente la domanda.^_^ – sunkehappy

+0

Ah, scusa. Cancellerà il mio commento. – Bryan