我在TabBarController中有一个UINavigationController,当我选择已经选择的tabBarItem时,NavigationController会弹回到它的rootViewController。 据我所知,这是一种自动行为。
我需要修改此行为,并使用
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
再次推送我想要的viewController,因为我的推送发生了与自动弹出的并行,所以无法正常工作。
答案 0 :(得分:0)
我不知道如何改变行为,但我强烈建议你不要乱用这种默认行为。如果Apple没有提供一种简单的方法来处理这种行为,那么就有理由这样做。
从字面上看,每个画外音用户都依赖于手势,我假设其中一个是双击选项卡转到rootView。与任何这些默认手势混淆,你可以保证惹恼一大堆VO用户。不幸的是,我学到了很多东西(使用带有自定义后退按钮的自定义导航栏)。
希望这个答案说服你重新考虑你的要求=)
答案 1 :(得分:0)
解决方案是继承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