在非 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中的Navigation Controller和Navigation Bar对象分配给了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 属性,但它不允许我这样做,因为它是只读的。
难住了。