【问题标题】:Switch between UINavigationController segues in xcode6?在 xcode6 中的 UINavigationController segues 之间切换?
【发布时间】:2015-02-19 05:44:58
【问题描述】:

我的视图控制器可以呈现 2 个导航视图控制器,每个控制器都有自己的视图控制器堆栈:

现在我希望能够随时切换这些导航控制器。我通过新的显示功能展示它们。例如,我深入顶部导航控制器层次结构,我想切换到底部。我可以在网络视图控制器中调用吗

UIViewController *rootController = (UIViewController *)[UIApplication sharedApplication].keyWindow.rootViewController;
[rootController performSegueWithIdentifier:@"sessionsNavigationController" sender:nil];

这会将顶部控制器保留在堆栈中并将底部放在它上面吗,它会取代它们吗?

英语不是我的母语,但如果不清楚我想要什么,我会尝试提供一些额外的信息。

【问题讨论】:

    标签: ios objective-c uinavigationcontroller


    【解决方案1】:

    最好的方法是在 AppDelegate.m 中自己处理切换

    UINavigationController* firstNVC;
    UINavigationController* secondNVC;
    BOOL showingFirst;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        //Store two local pointers to the Navigation Controllers you want to switch between
        self.firstNVC = [[UIStoryboard storyboardWithName:@"main" bundle:nil] instantiateViewControllerWithIdentifier:@"firstNVC"];
        self.secondNVC = [[UIStoryboard storyboardWithName:@"main" bundle:nil] instantiateViewControllerWithIdentifier:@"secondNVC"];
        //Add yourself to listen for a notification to switch controllers
        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(switchViews:)
                                                 name:@"switchViews"
                                               object:nil];
        //Set toggle bool
        showingFirst = TRUE;
        //Set first view to show
        self.window.rootViewController = self.firstNVC;
        return YES;
    }
    
    - (void)switchViews:(NSNotification *)notification 
    {
        //Swap viewcontrollers
        if(showingFirst)
            self.window.rootViewController = self.secondNVC;
        else
            self.window.rootViewController = self.firstNVC;
        //Toggle bool
        showingFirst = !showingFirst;
    }
    

    然后在您的应用程序中您想要切换控制器的任何地方,只需使用此行向您的 AppDelegate 发布通知

    [[NSNotificationCenter defaultCenter] postNotificationName:@"switchViews" object:self userInfo:nil];
    

    【讨论】:

      【解决方案2】:

      如果您希望用户能够控制切换,标签栏控制器将是您的最佳选择。您可以将每个导航控制器连接到UITabBarController 中的选项卡。这将允许用户随意在顶部和底部导航控制器之间切换。这也将在您切换时为每个导航控制器保存您在视图控制器堆栈中的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多