在非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属性,但它不会让我,因为它是只读的。
难住了。