2013-09-23 12 views
11

Wiem, że są duplikaty tego pytania, ale moja sytuacja jest tutaj inna.Wywołanie metody UIViewController z delegata aplikacji

Gdy użytkownik wraca do domu (void)applicationDidEnterBackground zostaje wywołany z klasy AppDelegate. Jednak gdy użytkownik naciśnie przycisk strony startowej, nie chcę, aby użytkownik ponownie zobaczył ten kontroler widoku, więc mam metodę o nazwie (void)goToBeginning, która przełącza się na inny kontroler widoku. Chcę móc wywołać tę metodę z AppDelegate. Naprawdę nie chcę używać do tego celu NotificationCenter. Także wybrane rozwiązanie tutaj: Calling view controller method from app delegate nie działa dla mnie, ponieważ inicjuje nowy obiekt, natomiast chcę móc wywołać obiekt, który jest już w widoku. Jak mogę to zrobić? Używam iOS 7 i XCode 5.

+0

Świetne pytanie +1, oznaczono jako duplikat, ponieważ jest to podobne pojęcie klasy wywołującej inną klasę, w twoim przypadku chcesz uzyskać referencję dla instancji klasy (kontroler widoku), abyś mógł wchodzić w interakcje z interfejsem użytkownika elementy, takie jak widoki ... Pytanie, które uważam za oryginał, pochodzi sprzed 4 lat i ma wiele poglądów i głosów. –

Odpowiedz

42
  1. Powiadomienie. Ale tego nie chcesz.
  2. Możesz uzyskać odniesienie do tego viewController w AppDelegate. Niż wywołanie tej (void)goToBeginning metody w (void)applicationDidEnterBackground

na przykład: W swojej ViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

iw swoim AppDelegate:

@class MyViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (weak, nonatomic) MyViewController *myViewController; 

@end 

A w implementacji, AppDelegate „s:

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

Dzięki, działa dobrze –

+0

@Bryan Nie ja, OP nie chce tego. "Naprawdę nie chcę używać" NotificationCenter ". Powinieneś uważnie przeczytać to pytanie.^_^ – sunkehappy

+0

Ah, przepraszam. Usunie mój komentarz. – Bryan

Powiązane problemy