Vinzzz 的回答是一个很好的解决方案。这是我的实现,因为上下文略有不同。
在 UIViewController 的viewDidLoad
方法中,我设置了导航栏的导航项,如下所示:
NSMutableArray* navItems = [@[] mutableCopy];
if (self.navigationController.viewControllers.count > 1)
{
NSInteger penultimateIndex = (NSInteger)self.navigationController.viewControllers.count - 2;
UIViewController* prevVC = (penultimateIndex >= 0) ? self.navigationController.viewControllers[penultimateIndex] : nil;
UINavigationItem* prevNavItem = [[UINavigationItem alloc] init];
prevNavItem.title = prevVC.title;
[navItems addObject:prevNavItem];
}
UINavigationItem* currNavItem = [[UINavigationItem alloc] init];
... <Add any other left/right buttons to the currNavItem> ...
[navItems addObject:currNavItem];
[self.navbar setItems:navItems];
...self.navbar
我的浮动独立 UINavigationBar 在哪里。
我还将当前视图控制器分配为self.navbar
的委托,然后监听-navigationBar:shouldPopItem:
按下后退按钮时触发的事件:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
if (navigationBar == self.navbar)
{
[self.navigationController popViewControllerAnimated:YES];
return NO;
}
return YES;
}
(如果你 return YES
,它会在 ios7 中使用滑动手势时崩溃)。