1

非 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 属性に割り当てようとしましたが、読み取り専用であるため、許可されませんでした。

困惑した。

4

0 に答える 0