解決策は、UINavigationController をサブクラス化し、サブクラスを UITabBarController で使用することです。他にもいくつかの便利な機能を追加しました。
そして、これを行うだけで問題ありません-私のアプリには5つ星があり、誰もそれについて不満を持っていません:
@implementation MyNavigationController
// This suppresses the normal pop to the root view controller
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
{
return @[];
}
// Extra: give my base classes some notice this is going to happen
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
UIViewController *vc = self.topViewController;
if ([vc respondsToSelector:@selector(viewControllerWillBePopped)]) {
[vc performSelector:@selector(viewControllerWillBePopped)];
}
return [super popViewControllerAnimated:animated];
}
// Extra: let the UIViewController refuse to pop
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
BOOL ret = YES;
UIViewController *vc;
for(UIViewController *obj in self.viewControllers) {
if(obj.navigationItem == item) {
vc = obj;
break;
}
}
if ([vc respondsToSelector:@selector(shouldPop)]) {
NSNumber *retVal = [vc performSelector:@selector(shouldPop)];
ret = [retVal boolValue];
if(!ret) return NO;
}
return [super navigationBar:navigationBar shouldPopItem:item];
}
@end