2013-08-05 9 views
23

modalviewcontrollerを却下した後にviewwillappearに電話をかけるにはどうすればよいですか?modalviewcontrollerを閉じた後にビューを表示する

はモーダル私のViewControllerを提示:// firsviewcontroller を:

-(IBAction)AddActivity:(id)sender{ 


    CreateActivity *addViewController = [[CreateActivity alloc] initWithNibName:@"CreateActivity" bundle:nil]; 

    addViewController.delegate = self; 
    addViewController.modalPresentationStyle = UIModalPresentationFormSheet; 

    addViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

    [self presentModalViewController:addViewController animated:YES]; 


    addViewController.view.superview.frame = CGRectMake(50, 260, 680, 624); 

} 

// secondvioewcontroller:私はこれを却下するalertviewを作成するために私viewwillappearが呼び出されませんでしたが却下した後

任意のアイデアくださいモーダルビューですが、ビューウィリアーピアは呼ばれませんでした:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    if (buttonIndex == 0){ 


     if ([self respondsToSelector:@selector(presentingViewController)]){ 
      [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
     } 
     else { 
      [self.parentViewController dismissModalViewControllerAnimated:YES]; 
     } 
    } 
} 
+3

あなたは確信していますか?どのようにチェックしていますか?私の経験では、表示されたモーダルが解除されたときに、viewWillAppearは常に表示されているView Controllerに対して起動します。 – geraldWilliam

+0

私は自分の投稿を編集して、私が何をしたのか、私は何が欠けているのか見ていますか? –

+0

@OuassimMouyarden物事に入る前にOOPについて正しく考える方法を学ぶ必要があります。それが言われても、私はまだあなたのために助けてくれるでしょう。あなたのUIAlertViewのボタンが押されたときに、正確に何をしたいですか? –

答えて

11

あなたは彼モーダルビューコントローラフォームシート、提示コントローラのビューは決して消えないので、解雇後にviewWillAppear:は呼び出されません。表示されたView Controllerが解消後に何かを処理するようにするには、モーダルコントローラのviewDidDisappear:メソッドでデリゲートメソッドを呼び出します。デリゲートをすでに設定しているので、デリゲートプロトコルが既にCreateActivityにあるとします。

ところで、非推奨のメソッドを使用して、モーダルビューコントローラを表示および非表示にする必要があります。

+0

代理メソッドを呼び出す代わりに、完了時にコードを実行することができます:dismissViewController:animated:completion:。コントローラがnavスタックの一部(たとえば、別のコントローラを押した場合)にviewDidDisAppearにコードを配置すると問題が発生する可能性があります。viewDidDisappearを使いたい場合は、self.isBeingDismissedを必ず確認してください。 – TomSwift

12

presentModalViewController:animated:/dismissModalViewControllerAnimated:は推奨されていません。代わりにpresentViewController:animated:completion:/dismissViewControllerAnimated:completion:を使用してください。あなたは、あなたがアンワインドセグエを実装し、アンワインドコールバックであなたの完了コードをトリガすることができますストーリーボードを使用している場合は、いっその

- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     MyCustomViewController* mcvc = (MyCustomViewController*)self.presentingViewController; 

     [self dismissViewControllerAnimated: YES completion: ^{ 

      // call your completion method: 
      [mcvc someCustomDoneMethod]; 
     }]; 
    } 
} 

あなたは、任意のコードのポスト消去までを実行するために完了ブロックを使用することができます方法。

+0

返信いただきありがとうございますので、[self.presentingViewController someCustomDoneMethod]; someCustomDoneMethodは私のfirstviewcontrollerで定義されていなければなりません。それはmodalviewを終了した後に呼び出されますか? –

+0

はい。メソッドを呼び出せるようにpresentingViewControllerをカスタムコントローラ型にキャストする必要があります。サンプルに1つの編集を加えています。表示されているView ControllerでdismissViewControllerAnimatedを呼び出す必要はありません。あなたは自分自身に対してそれを呼び出すことができます。 – TomSwift

関連する問題