在TabBarController内部的UINavigationController中选择已经选中的tabBarItem将视图弹出到rootViewController,howTo如何更改?

时间:2012-08-27 15:48:13

标签: ios uinavigationcontroller uitabbarcontroller

我在TabBarController中有一个UINavigationController,当我选择已经选择的tabBarItem时,NavigationController会弹回到它的rootViewController。 据我所知,这是一种自动行为。

我需要修改此行为,并使用

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

再次推送我想要的viewController,因为我的推送发生了与自动弹出的并行,所以无法正常工作。

2 个答案:

答案 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