非 IUSplitViewController アプリでは、これを UIApplicationDelegate クラス ヘッダーに追加することで、デフォルトのバック バー アニメーションを抑制することができます。
@interface MyNavigationBar : UINavigationBar { } @end
@interface MyNavigationController : UINavigationController { } @end
対応する.mでこれと一緒に:
@implementation MyNavigationController
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
return( [super popViewControllerAnimated:NO] );
}
@end
@implementation MyNavigationBar
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated
{
return( [super popNavigationItemAnimated:NO] );
}
@end
もちろん、MainWindow.xib の Navigation Controller オブジェクトと Navigation Bar オブジェクトも、Interface Builder でそれぞれ MyNavigationController と MyNavigationBar に割り当てました。
これは、標準アプリケーションでは魅力のように機能します。
私の問題は、UISplitViewController アプリで同じことを達成することです。
具体的には、その場合にUINavigationBarのデフォルトの動作をオーバーライドして、ビューコントローラーがバックバーボタンでポップされたときにナビゲーションバーのアニメーションを抑制する方法がわかりません。
UISplitViewController 右ペインのルートとして UIViewController をインスタンス化するたびに、これを行うことで UINavigationController の動作をオーバーライドできます。
[split is a pointer to my UISplitViewController]
MyNavigationController *nc = (MyNavigationController *) [split.viewControllers objectAtIndex:1];
nc = [[[MyNavigationController alloc] initWithRootViewController:someController] autorelease];
split.viewControllers = [NSArray arrayWithObjects: [split.viewControllers objectAtIndex:0], nc, nil];
split.delegate = someController;
要約すると、UISplitViewController アプリで戻るバー ボタンを押すと、アクティブなビュー コントローラーのコンテンツ領域は、戻るバー ボタンを介してポップされたときにアニメーション化されませんが、ナビゲーション バーはアニメーション化されます。
このフォーラムで標準的なアプリケーション ケースのソリューションを見つけましたが、UISplitViewController ソリューションについての言及はありませんでした。
MyNavigationController で initWithCoder をオーバーライドして、MyNavigationBar のインスタンスを navigationBar 属性に割り当てようとしましたが、読み取り専用であるため、許可されませんでした。
困惑した。