UINavigationControllerを使用しているiPhoneアプリで問題が発生しています。pushNavigationControllerを使用している場合は、正常に機能します。iPhoneは、次のViewControllerに切り替えながらアニメーションを実行します。ただし、ViewControllersの配列とsetViewControllersメソッドを使用すると、アニメーションに不具合が発生し、はっきりと見えるアニメーションのバグに発展する可能性があります。
次のスニペットは、ルートViewControllerで呼び出されます。条件に応じて、ViewController1に切り替えるか、ViewController2に直接移動する必要があります。後者の場合、ユーザーはvc1に戻り、次にルートに戻ることができます。
NSMutableArray* viewControllers = [NSMutableArray arrayWithCapacity:2];
// put us on the stack
[viewControllers addObject:self];
// add first VC
AuthentificationViewController* authentificationViewController =
[[[AuthentificationViewController alloc] initWithNibName:@"AuthentificationViewController" bundle:nil] autorelease];
[viewControllers addObject:authentificationViewController];
if (someCondition == YES)
{
UserAssignmentsListViewController* userAssignmentsListViewController =
[[[UserAssignmentsListViewController alloc] initWithNibName:@"UserAssignmentsOverviewViewController" bundle:nil] autorelease];
[viewControllers addObject:userAssignmentsListViewController];
}
[self.navigationController
setViewControllers:[NSArray arrayWithArray:viewControllers] animated:YES];
ご覧のとおり、最初のVCとおそらく2番目のVCを配列に追加し、最後にアニメーションでnavigationControllerスタックを設定します。これは、最初のコントローラーのみを追加した場合に正しく機能します。ただし、アニメーションを2番目のコントローラーに移動する必要がある場合、ナビゲーションバーのタイトルは「フライイン」にはなりません。代わりに、アニメーションが終了するまで空のタイトルがあります。さらに悪いことに、ナビゲーションバーのタイトルをカスタムボタンに置き換えると、アニメーションが終了するまでこのボタンが左上隅に表示されます。これはかなりのバグです。
複数のpushViewControllerメソッドで回避策を使用しようとしましたが、アニメーションが正しく表示/感じられません。pushViewControllerと同じ方法でナビゲーションにアニメーションを実行させたい。ここでの唯一の違いは、VCを追加せず、スタック全体を一度に設定することです。ここに別の回避策がありますか、それともこれはフレームワークのバグと見なすことができますか?私はVC2にpushNavControllerのみを使用することを考え、それからどういうわけかVC1をスタックに挿入しましたが、それは不可能のようです。
すべてのヒントとアドバイスをありがとう。:-)
技術データ:iOS 4.2を使用しており、4.0用にコンパイルしています。