2013-09-23 64 views
11

この質問は重複していますが、私の状況はここでは異なります。アプリケーションデリゲートからUIViewControllerメソッドを呼び出す

ユーザーが家に帰ると(void)applicationDidEnterBackgroundAppDelegateクラスから呼び出されます。しかし、一旦ユーザがホームボタンを押すと、このビューコントローラを再び見ることを希望しないので、別のビューコントローラに切り替える(void)goToBeginningというメソッドがあります。私はAppDelegateからこのメソッドを呼び出せるようにしたい。私は本当にこのためにNotificationCenterを使用したくありません。また、ここで選択したソリューションは: Calling view controller method from app delegate 私は新しいオブジェクトを初期化するので、私はすでにビューにあるオブジェクトを呼び出せますが、私はうまくいきません。どうやってやるの?私はiOS 7とXCode 5を使用しています。

+0

偉大な質問+1、私は重複してマークした、これはあなたのインスタンスでは、インスタンス化されたクラス(ビューコントローラ)の参照を取得したいので、別のクラスを呼び出すクラスのすべての同様の概念ですので、UI私は元来と考えている質問は4年前からあり、多くの意見と票を持っています。 –

答えて

42
  1. 通知。しかし、あなたはこれを望んでいません。
  2. viewControllerへの参照は、AppDelegateに記載されています。あなたの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

でその(void)goToBeginningメソッドを呼び出すより

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

ありがとう、それはうまく動作します –

+0

@ブライアン私ではない、OPはこれを嫌いです。 「私は本当に「通知センター」を使いたいとは思わない。あなたは慎重に質問を読むべきです。^_^ – sunkehappy

+0

ああ、申し訳ありません。私のコメントを削除します。 – Bryan

関連する問題