0

問題は次のとおりです。modalViewController次のようなIBActionをトリガーするボタンが表示されます。

-(IBAction)myMethod
{
    [self dismissModalViewControllerAnimated:YES];

    if([delegate respondsToSelector:@selector(presentOtherModalView)])
    {
        [delegate presentOtherModalView];
    } 
}

そのデリゲートであるルートビューでは、デリゲートメソッドをmodalViewController実装しました。presentOtherModalViewこれは次のようになります。

    -(void)presentOtherModalView
{

     AnotherViewController *viewInstance = [[AnotherViewController alloc]initWithNibName:@"AnotherViewController" bundle:nil];

     viewInstance.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

     [self presentModalViewController:viewInstance animated:YES];

    [viewInstance release];
}

問題は、この2番目modalViewControllerが表示されていないことです。それは私にメッセージを与えますwait_fences: failed to receive reply: 10004003...これはどのように行われるべきですか?

4

2 に答える 2

1

これは、dismissModalViewControllerAnimatedアニメーションで閉じるのに時間がかかり、最初のモーダルビューを閉じる前に別のビューを呼び出してモーダルビューとして表示しているため、表示中のモーダルビューの呼び出しが拒否されたためです。別のビューを呼び出すことができるのは自分だけを完全に閉じた後、ビューが表示されていないときにアニメーションを実行しないでください。この問題を解決するには、時間間隔を使用して2秒または3秒後に現在のモーダルビューを呼び出すか、完了ブロックを使用してdismissModalViewControllerAnimated

これを使用してそれを達成することができます

[delegate performSelector:@selector(presentOtherModalView) withObject:nil afterDelay:3];
于 2012-08-17T12:47:46.587 に答える
1

それらは互いに正確に実行されるため(ビューが消える/表示されるのを待たない)、実行されません。画面には一度に1つのModalViewControllerしか存在できないため、次のModalViewControllerが画面に表示される前に、まず他のModalViewControllerが消えるのを待つ必要があります。

あなたはこれをあなたが望むように創造的に行うことができます、しかし私がそれをした方法は次のようなものでした:

[self dismissModalViewControllerAnimated:YES];
self.isModalViewControllerNeeded = YES;

次に、基になるViewControllerのviewDidAppearメソッドで、次のようにします。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.isModalViewControllerNeeded) {
        [self presentModalViewController:viewInstance animated:YES];
        self.isModalViewControllerNeeded = NO;
    }
}

それが役に立てば幸い!

于 2012-08-17T12:53:39.230 に答える