2013-09-23 81 views
11

我知道這個問題存在重複,但我的情況在這裏有所不同。從應用程序代理調用UIViewController方法

當用戶返回家時(void)applicationDidEnterBackgroundAppDelegate類被調用。但是,一旦用戶按下home按鈕,我不希望用戶再次看到此視圖控制器,所以我有一個名爲(void)goToBeginning的方法切換到另一個視圖控制器。我希望能夠從AppDelegate調用此方法。我真的不想用NotificationCenter這個。另外挑選的解決方案在這裏: Calling view controller method from app delegate 不起作用,因爲它初始化新的對象,而我想能夠調用已經在視圖中的對象。我怎樣才能做到這一點?我正在使用iOS 7和XCode 5.

+0

偉大的問題+1,我標記爲重複的,因爲這是一個類調用另一個類的所有相似的概念,在你的情況下,你想獲得實例化類(視圖控制器)的引用,以便您可以與UI交互元素,如意見......我認爲是原創的問題來自4年前,並有許多意見和投票。 –

回答

42
  1. 通知。但你不想要這個。
  2. 您可以在AppDelegate中獲得對您的viewController的引用。不是要求在(void)applicationDidEnterBackground

例如是(void)goToBeginning方法:在你的ViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

而在你AppDelegate

@class MyViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (weak, nonatomic) MyViewController *myViewController; 

@end 

而在AppDelegate的實現:

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

謝謝,它工作正常 –

+0

@Bryan不是我,OP不希望這樣。 「我真的不想使用'NotificationCenter'」。你應該仔細閱讀這個問題。^_^ – sunkehappy

+0

啊,對不起。將刪除我的評論。 – Bryan

相關問題