【问题标题】:How to set segue doing pop to root and push a new one in storyboard?如何将 segue 设置为 root 并在情节提要中推送一个新的?
【发布时间】:2017-08-12 20:20:19
【问题描述】:

我想制作一个使导航控制器 poptoroot 的 segue,然后将一个新控制器推入导航控制器。 例如,现在控制器层次结构是

 navigationController->rootcontroller->controllerA ->controllerB

我想在控制器 B 中制作一个 segue perfome,segue 将使层次结构变为

navigationController->rootcontroller-> controllerC

这可能吗?

【问题讨论】:

  • 进一步阐明您的要求。
  • @vaibhav 我已经编辑了我的问题,你现在能得到我的问题吗?
  • 如果rootView嵌入了navigationCont,你可以对任何vc执行segue。
  • 你的意思是我可以做这两个步骤 1) 弹出到 root 2) 在一个 segue 中推送一个控制器?如何设置?
  • 困惑,你怎么能一次执行这两个动作。

标签: ios objective-c storyboard xib


【解决方案1】:

您想将 segue 设置为 root。这可以使用Unwind Segues 来实现。有关这方面的更多详细信息,您可以关注此Apple 文档。

https://developer.apple.com/library/content/technotes/tn2298/_index.html#//apple_ref/doc/uid/DTS40013591-CH1-TNTAG2-ADDING_AN_UNWIND_SEGUE_TO_A_STORYBOARD

要推送到新的VC,你可以简单地推送故事板。

【讨论】:

    【解决方案2】:

    您可以使用 for 循环弹出到根目录或您想要的位置,并使用相同的方法向前推进:

    // For Pop
    
         NSArray *viewControllers = [[self navigationController] viewControllers];
            for( int i=0;i<[viewControllers count];i++){
                id obj=[viewControllers objectAtIndex:i];
                if([obj isKindOfClass:[ViewControllerYouWantToStopOn class]]){
                    [[self navigationController] popToViewController:obj animated:YES];
                    return;
                }
            }
    
    //For Push
    
     NSArray *viewControllers = [[self navigationController] viewControllers];
            for( int i=0;i<[viewControllers count];i++){
                id obj=[viewControllers objectAtIndex:i];
                if([obj isKindOfClass:[ViewControllerYouWantToJumpOn class]]){
                    [[self navigationController] pushViewController:obj animated:YES];
                    return;
                }
            }
    

    【讨论】:

    • 因为现在我正在使用情节提要,我想以情节提要的方式进行这种过渡,谢谢@Vinnet Rai
    【解决方案3】:

    这段代码对我有用:

    self.performSegue(withIdentifier: "segue_id", sender: self)
    var navigationArray = self.navigationController?.viewControllers
    var i = navigationArray!.count - 2
    while i > 0 {
        navigationArray!.remove(at: i)
        i = i - 1
    }
    self.navigationController?.viewControllers = navigationArray!
    

    【讨论】:

    • 为了得到有用的答案,这个反应需要扩展。解释为什么这是问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2012-07-05
    • 2012-06-07
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多