1

IBAction があり、次のようになります。

- (IBAction) onPressed: (id) sender {

   [self openMyDelegateToSeeIfIAmReady];

   if (AmIReady == YES)
   {
      [self doMyWork];
   }
}

現在、これは機能しません。はブール値であり、 inAmIReadyに変わります。事は、になる前に、このコードの塊ですYESopenMyDelegateToSeeIfIAmReadyAmIReadyYES

if (AmIReady == YES)
{
   [self doMyWork];
}

呼び出され、doMyWork決して呼び出されません。このメソッドが終了するまで待機させるにはどうすればよい[self openMyDelegateToSeeIfIAmReady]ですか?

編集:

これが私が持っているものですopenMyDelegateToSeeIfIAmReady

- (void) openMyDelegateToSeeIfIAmReady
{
    MyViewController *mvc = [[MyViewController alloc]initWithNibName:@"MyViewController" bundle:nil];
    mvc.delegate  = self;

    [self presentModalViewController:mvc animated:YES];
    [mvc release];
    amIReady = YES;
}

このデリゲート (MyViewCrontroller) でも、ユーザーの入力が必要です。ユーザー入力が入力されている場合は、実行する必要がありますdoMyWork

4

1 に答える 1

0

モーダル ビュー コントローラーが表示された後にコードを実行する場合は-[ UIViewController presentViewController:animated:completion:]、ブロックを使用して 'completion' 引数に渡します。

(このメソッドは の代わりですpresentModalViewController:animated:)

コードを次のように変更します。

-(IBAction)onPressed:(id)sender 
{
    MyViewController * controller = [ [ MyViewController alloc ] initWithNibName:@"MyViewController" bundle:nil ];
    controller.delegate = self;
    [ self presentViewController:controller animated:YES completion:^{
        [ self doMyWork ] ;
    }]
}
于 2013-02-26T18:55:28.137 に答える