2012-03-14 7 views
1

私は、アニメーションを持つナビゲーションコントローラにView Controllerをプッシュすると、そのアニメーションが完了するまで待ってから別のView Controllerを押す必要があります。完成したnavコントローラのアニメーションを確認する

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

おかげで、あなたはコントローラクラスでUINavigationControllerDelegate(アプリデリゲートが行います)を実装することができます(多くのVCを超える右にすてきな動きを)一度に1つのVCをプッシュしたい結集場合は、割り当て

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


    //Make sure animation has completed before sending message below 


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

//... 

} 

答えて

3

それ/あなた自身にself.navigationController.delegate。 UINavigationControllerは、各プッシュ後にnavigationController:didShowViewController:animated:を呼び出します。

-1

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

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

実現方法実装:) アニメーションが終了すると、新しいナビゲーションコントローラのコンテンツが完全に読み込まれないことがあるので、このメソッドはプッシュが独立している場合にのみ信頼できますその内容

+0

iOS 7では、アニメーションが終了する前に完了ブロックが実行されます。 – fabb