Tab+NavigationController流程

Tab+NavigationController flow

我的应用程序中有一个标签栏控制器作为主屏幕。一些选项卡嵌入了导航控制器。

这是我的问题: 第一个选项卡是应用程序启动时的初始选项卡。在某些情况下,用户应该在应用程序启动后立即看到第二个屏幕 B(在导航堆栈上)(在第一个屏幕的 viewWillAppear 中触发的 performSegue)。这可以正常工作。用户启动应用程序并立即看到第二个屏幕。当用户切换到不同的选项卡并返回时,这也适用。问题是当用户已经在第一个选项卡上并再次点击它时。然后堆栈被销毁,用户看到第一个屏幕 A,它将在短时间内动画到第二个屏幕 B。用户可以清楚地看到此转换。

First tab --> screen A --> screen B --> ...
|
Second tab --> screen T --> screen U --> ...
|
...

所以问题是如何防止这种行为?在这种情况下,用户不应看到 A 和 B 之间的转换。

谢谢

为什么不将代码从屏幕 A 更改为在特定条件下执行下一屏幕 B 的转场。,

只需在 TabbarController Class(Tabbar 的子类)方法中使用 CERTAINcondition,

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if (tabBarController.selectedIndex == 0)
    {  
         if (CERTAIN condition True) {
              UITabBar tabbar = self.tabBarController.tabBar;
              NSArray *controlrs = self.viewControllers; 
              NSMutableArray *controllerCopy = [controlrs mutablecopy];
              SCREEN_B_class *bClassObj =  . .. //Tab 1 class Just Screen B, not Screen A -> ScreenB
              [controllerCopy replaceObjectsAtIndex:[NSIndexSet indexSetWithIndex:0] withObjects:[NSArray arrayWithObjects:bClassObj]]
              tabBarController.viewControllers = controllerCopy;

         }

    }
}

希望对你有帮助,

HTH,享受编码吧!

这是 UITabBarController 的预期行为,它会将导航控制器弹出到其堆栈中的第一个视图控制器。

如果您不希望在用户点击选项卡栏项目时在某些情况下出现屏幕 A,只需从导航堆栈中删除第一个视图控制器,在从 A 推送到 B 后执行类似的操作(表单B 视图控制器的 viewDidLoad: 中的实例):

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
[allViewControllers removeObjectAtIndex: 0];
navigationController.viewControllers = allViewControllers;

这样屏幕 B 将成为您导航堆栈的根视图控制器,这就是您想要的。