【问题标题】:Tab bar controller need to tap 2 times return main view标签栏控制器需要点击 2 次返回主视图
【发布时间】:2017-06-22 06:44:44
【问题描述】:

我已经设置了一个标签栏视图控制器并与导航控制器链接,
参考这张图片。

我面临的问题是这张图片是“更多”标签栏页面

当我点击十字按钮时,它会将主视图控制器推送到另一个视图。但是当我点击另一个选项卡并返回更多选项卡时,视图控制器仍然停留在主视图控制器而不是更多选项卡源控制器。我需要点击更多选项卡 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);
    }
}

【问题讨论】:

    标签: ios objective-c iphone xcode uitabbarcontroller


    【解决方案1】:

    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】:

      试试这个:

      在 appdelegte 或 UITabViewController 的子类上符合协议

      <UITabBarControllerDelegate>
      

      分配委托

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

      【讨论】:

        【解决方案3】:

        只需将此方法添加到 UITabBarControllerDelegate

        override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){在此方法中输入以下代码}

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

        【讨论】:

          猜你喜欢
          • 2015-12-08
          • 1970-01-01
          • 2015-04-22
          • 2018-12-03
          • 2017-04-21
          • 1970-01-01
          • 2017-10-04
          • 2016-06-25
          • 1970-01-01
          相关资源
          最近更新 更多