在非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

当然,我还在Interface Builder中将MainWindow.xib中的导航控制器和导航栏对象分别分配给MyNavigationController和MyNavigationBar .

这就像标准应用程序中的魅力一样 .

我的问题是在UISplitViewController应用程序中实现相同的功能 .

具体来说,我无法弄清楚如何在这种情况下覆盖UINavigationBar的默认行为,以便在通过后退栏按钮弹出视图控制器时抑制导航栏的动画 .

每当我将UIViewController实例化为UISplitViewController右窗格的根时,我都可以通过执行此操作来覆盖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属性,但它不会让我,因为它是只读的 .

难住了 .