标签栏控制器需要点击2次返回主视图

时间:2017-06-22 06:44:45

标签: ios objective-c iphone xcode uitabbarcontroller

我已设置标签栏视图控制器并与导航控制器链接,
请参阅此图片。
enter image description here
我面临的问题是这个图像是"更多"标签栏页面enter image description here
当我点击十字按钮时,它会将家庭视图控制器推送到另一个视图。但当我点击另一个选项卡并返回更多选项卡时,视图控制器仍然停留在主视图控制器而不是更多选项卡原点控制器。我需要点击更多标签2次然后它只会返回更多选项卡视图控制器。选择项目时,下面的代码是我的标签栏控制器。

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    NSLog(@"didSelectItem: %ld", (long)item.tag);

    if (item.tag == 0) {
    //try to dismiss home view controller in this way, but it won't work
        [self.navigationController popToRootViewControllerAnimated:YES];

        NSString *str = @"TAB 1";
        NSLog(@"%@", str);
    }
}

3 个答案:

答案 0 :(得分:1)

试试这个:

在UITabViewController的appdelegte或子类上使用协议

<UITabBarControllerDelegate>

分配代表

tabBarController.delegate = self

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if ([viewController isKindOfClass:[UINavigationController class]])
    {
        [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
    }
}

答案 1 :(得分:0)

更新了Swift 4.1 iOS 11.2的答案

class TabBarMenuView: UITabBarController {

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        if (self.selectedViewController?.isKind(of: UINavigationController.self))!
        {
            let nav = self.selectedViewController as! UINavigationController
            nav.popToRootViewController(animated: false)
        }
    }
}

答案 2 :(得分:0)

只需将此方法添加到UITabBarControllerDelegate

覆盖函数tabBar(_ tabBar:UITabBar,didSelect项:UITabBarItem){在此方法中输入以下代码}

    if item.tag < self.viewControllers!.count {
        if let nav = self.viewControllers![item.tag] as? UINavigationController {
            nav.popToRootViewController(animated: true)
        }
    }