1

ビューコントローラーをアニメーション付きのナビゲーションコントローラーにプッシュする場合は、アニメーションが完了するまで待ってから別のビューコントローラーをプッシュする必要があることがわかりました。そうしないと、警告が表示され、予期しない結果が生じる可能性があります。

この問題を回避するために、navコントローラーのアニメーションが完了したかどうかをどのように確認しますか?

ありがとう

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:    (NSIndexPath *)indexPath
{ 
    // ...


    //Make sure animation has completed before sending message below


[[self navigationController] pushViewController:detailsViewController animated:NO];

//...

}
4

2 に答える 2

3

一度に 1 つの VC をプッシュしたい場合 (多くの VC を右に移動するのは良いことです) UINavigationControllerDelegate、コントローラー クラスに を実装し (アプリ デリゲートが行います)、それ/自分自身を に割り当てますself.navigationController.delegate。UINavigationController はnavigationController:didShowViewController:animated:、各プッシュの後に呼び出されます。

于 2012-03-14T18:08:43.810 に答える
-1

私は、私にとって非常にうまく機能する別の方法を使用しました。の引数でpushViewController:animated:呼び出しをラップするだけです。私がやっていることである後続のコントローラーを押すなど、完了時に実行する必要があるものは何でも入れてください。animations:[UIView animateWithDuration:animation:completioncompletion:

私の場合、プッシュするコントローラーのリストを引数として配列 (NSMutableArray) を取るメソッドですべてを実行します。ブロック内で、メソッドは配列 (および)completion:から最初の要素をポップし、配列の残りの部分を使用して自分自身を呼び出します。objectAtIndex:0removeObjectAtIndex:0

これは楽しい継続渡しスタイルの実装です:) ただし、アニメーションの最後に新しいナビゲーションコントローラーのコンテンツが完全に読み込まれていない可能性があることに注意してください。したがって、このメソッドは、プッシュがそれとは無関係である場合にのみ信頼できますコンテンツ。

于 2013-01-31T17:08:56.680 に答える